我正在尝试执行矩阵乘法,它涉及二维双数组。我在SUN网站上发表了一篇文章,但仍然无法做到正确。以下是我的问题及其处理方式的简要说明:
我有两个二维双数组,我从我的java函数传递给JNI。我将这些数组作为JObectArray传递。在我的JNI函数中,我创建了两个double类型的本地数组,并在这些本地数组中复制了JObjectArrays。然后我执行矩阵乘法并将结果存储在另一个名为result的本地数组中。 现在我想将这个结果数组返回给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;
}
}
}
}