簡體   English   中英

使用Jython在Python中調用Java方法。

[英]Calling a java method, in Python, using Jython.

我有一個名為matrixMult()的Java類,它有兩個方法,一個用1和0填充Matrix,另一個接收3個數組,將它們乘以2,然后將結果返回數組。

import java.util.Timer;

public class matrixMult {

//Method to populate Matrices with 1's and 0's//
public static int [][] populatingMatrices(int A [] [])
{
    for (int i = 0; i < A.length; i++) 
    {   
        for (int j = 0; j < A[0].length; j++) 
        {   
            if (i == j) 
            {
                A[i][j] = 1;
            }
            else 
            {
                A[i][j] = 0;
            }
        }
    //Returns Matrix populated with 1's and 0's//
    }return A;
} 

//Method to multiply Identity Matrices//
public static int [][] mmm (int a [][], int b [][], int c [][])
{
    int nr;
    int nc;

    nr = nc = a.length;

    for (int i = 0; i < nr; i++) 
    {
        for (int j = 0; j < nr ; j++ ) 
        {
            for (int k = 0;k < nr ;k++) 
            {
                c[i][j] = c[i][j] + a[i][k] * b[k][j];      
            }   
        }
    }
    return c;
}

}

然后,我編寫了一個python腳本,在其中導入了“ matrixMult”。 我想創建3個多維數組,使用populatingMatrices()方法填充其中的2個,使用mmm()方法乘以它們,並計算操作時間。

import timeit
import matrixMult

#matrixMult Object#
a = matrixMult()

listA = [[]]
listB = [[]]
listC = [[]]

#Populating matrices#
a.populatingMatrices(listA)
a.populatingMatrices(listB)
a.populatingMatrices(listC)

#Timing the Matrix Multiplication#
start_time = timeit.default_timer()
listC = a.mmm(listA,listB,listC)
elapsed = timeit.default_timer() - start_time

print elapsed

一旦掌握了時間,計划就是使用Gnuplot對其進行繪制,並比較三種不同操作(線性,二次和三次)的成本。

當我嘗試通過命令行運行python scrip時,出現以下錯誤:

File "mmmPY.py", line 20, in <module>
listC = a.mmm(listA,listB,listC)
at matrixMult.mmm(matrixMult.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm
    at java.lang.reflect.Method.invoke(Method.java:606)

java.lang.ArrayIndexOutOfBoundsException: java.lang.ArrayIndexOutOfBoundsException: 0

我的猜測是數組為空,並且沒有使用populatingMatrices()方法填充數組。

有人找到解決辦法嗎? 可以肯定地說我是Python的新手,而不是最好的Java程序員,但是我實在無法解決這個問題。

再次感謝你的幫助!

我認為所有有關您發送的列表的信息

#Populating matrices#
a.populatingMatrices(listA)
a.populatingMatrices(listB)
a.populatingMatrices(listC)

沒有初始化長度,所以當java控制它的長度時,它將看到0作為長度,然后拋出java.lang.ArrayIndexOutOfBoundsException: 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM