Как заполнить значения в 2d массиве в JNI и вернуть его как массив объектов? - PullRequest
1 голос
/ 13 декабря 2010

Я пытаюсь выполнить матричное умножение, которое включает в себя двумерные двойные массивы.Я следил за статьей на веб-сайте 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;
            }
        }
    }       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...