[英]Fails to run the script as Jython. But works with python without any issue
[英]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.