使用Jython在Python中调用java方法。

时间:2016-12-23 12:30:44

标签: java python arrays matrix jython

我有一个名为matrixMult()的Java类,有两个方法,一个用1和0填充一个矩阵,另一个接收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脚本时,我收到此错误:

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程序员,但我真的无法理解这一点。

再次感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为这是关于从

发送的列表的全部内容
#Populating matrices#
a.populatingMatrices(listA)
a.populatingMatrices(listB)
a.populatingMatrices(listC)

没有用一个长度初始化,所以当java控制它时,它会看到0作为长度然后抛出java.lang.ArrayIndexOutOfBoundsException: 0