J'ai besoin d'effectuer des opérations de la matrice dans Android, donc j'ai cherché sur le renderScript, et je me suis useful information hereUtilisation de RANSScript Intrinsic BLAS pour effectuer des opérations matricielles dans Android mais j'ai obtenu un mauvais résultat?
J'ai essayé le programme dans la réponse ci-dessus comme ceci:
private void compute(){
mRs = RenderScript.create(this);
Type.Builder builder = new Type.Builder(mRs, Element.U8(mRs));
Type a_type = builder.setX(3).setY(2).create();
Type b_type = builder.setX(3).setY(2).create();
Type c_type = builder.setX(2).setY(2).create();
Allocation A = Allocation.createTyped(mRs, a_type);
Allocation B = Allocation.createTyped(mRs, b_type);
Allocation C = Allocation.createTyped(mRs, c_type);
A.copyFrom(new byte[]{1, 2, 3, 1, 2, 3});
B.copyFrom(new byte[]{1, 1, 1, 0, 1, 0});
ScriptIntrinsicBLAS BLAS = ScriptIntrinsicBLAS.create(mRs);
BLAS.BNNM(A, 0, B, 0, C, 0, 1);
byte[] result = new byte[]{1,2,3,4};
C.copyTo(result);
for(int i = 0; i < result.length; ++i){
Log.i(TAG, i + " " + result[i]);
}
}
Mon fichier gradle est comme ça suivant:
targetSdkVersion 25
renderscriptTargetApi 25
renderscriptSupportModeEnabled true
renderscriptSupportModeBlasEnabled true
Mais j'ai les mauvais résultats que tous les éléments de la matrice C est égal à zéro:
08-25 16:31:05.384 30771-30771/cn.jy.testsiblas I/tag: 0 0
08-25 16:31:05.384 30771-30771/cn.jy.testsiblas I/tag: 1 0
08-25 16:31:05.384 30771-30771/cn.jy.testsiblas I/tag: 2 0
08-25 16:31:05.384 30771-30771/cn.jy.testsiblas I/tag: 3 0
Quelqu'un sait comment résoudre ce problème?
D'ailleurs, je viens de trouver, il semble y avoir de limitation dans les dimensions de la matrice qui peuvent être traitées avec ScriptIntrinsicBLAS? here is a question about this Quelqu'un sait-il à propos de cette limitation? Si la limitation est réelle, je crains de devoir trouver une autre façon de gérer les opérations matricielles sur Android.
Vous ne pouvez pas multiplier 3x2 par un autre 3x2, la 2ème matrice doit être 2x3. – sakridge
@sakridge Merci pour votre réponse. Mais la fonction BNNM exécute une opération matricielle comme ceci: C = A * Transpose (B), [document API ici] (https://developer.android.com/reference/android/renderscript/ScriptIntrinsicBLAS.html). donc les dimensions de chaque matrice sont correctes. Sinon, une exception sera levée si l'opération ne peut pas être effectuée. – Yuan