Я пытаюсь выполнить матричное умножение, которое включает в себя двумерные двойные массивы.Я следил за статьей на веб-сайте SUN, но все еще не мог понять это правильно.Вот краткое описание моей проблемы и способа ее решения:
У меня есть два двумерных двойных массива, которые я передаю в JNI из своей функции Java.Я передал эти массивы как JObectArray.В моей функции JNI я создал два локальных массива типа double и скопировал массивы JObjectArrays в эти локальные массивы.Затем я выполнил умножение матриц и сохранил результат в другом локальном массиве, который называется «результат».Теперь я хочу вернуть этот массив результатов обратно в функцию Java, но я не знаю, как это сделать.
Может кто-нибудь помочь мне с моим запросом?
Вот мой код:
JNIEXPORT jobjectArray JNICALL Java_prj_anyapp_JNIForMFCC_compute(JNIEnv *env, jclass jClass, jint Am, jint Bm, jint Bn, jobjectArray A, jobjectArray B)
{
jobjectArray retC;
int i,j,k;
double sum;
int localAm, localBm, localBn;
localAm = Am;
localBm = Bm;
localBn = Bn;
double localArrayCopyB[localBm][localBn];
double localArrayCopyA[localAm][localBm];
double localArrayCopyC[localAm][localBn];
for(i=0; i<localAm; i++) {
jdoubleArray oneDimA=
(jdoubleArray)(*env)->GetObjectArrayElement(env,A, i);
jint *elementA = (*env)->GetIntArrayElements(env,oneDimA, 0);
for(j=0; j<localBm; j++) {
localArrayCopyA[i][j]= elementA[j];
}
for(i=0; i<localBm; i++) {
jdoubleArray oneDimB=
(jdoubleArray)(*env)->GetObjectArrayElement(env,B, i);
jint *elementB = (*env)->GetIntArrayElements(env,oneDimB, 0);
for(j=0; j<localBn; j++) {
localArrayCopyB[i][j]= elementB[j];
}
}
for(i=0; i<localAm; i++){
for(j=0; j<localBm; j++){
for(k=0; k<localBn; k++){
sum += localArrayCopyA[i][k] * localArrayCopyB[k][j];
}
localArrayCopyC[i][j] = sum;
}
}
}
}