有一些很好的例子,说明如何将NumPy数组转换为Java数组,但是没有反之的例子——如何将数据从Java对象转换回NumPy数组。我有一个像这样的Python脚本:
from py4j.java_gateway import JavaGateway
gateway = JavaGateway() # connect to the JVM
my_java = gateway.jvm.JavaClass(); # my Java object
....
int_array=my_java.doSomething(int_array); # do something
my_numpy=np.zeros((size_y,size_x));
for jj in range(size_y):
for ii in range(size_x):
my_numpy[jj,ii]=int_array[jj][ii];
my_numpy
是一个 Numpy 数组,int_array
是一个 Java 数组,其中包含整数 - 一种 int[][]
类型的数组。在 Python 脚本中初始化如下:
int_class=gateway.jvm.int # make int class
double_class=gateway.jvm.double # make double class
int_array = gateway.new_array(int_class,size_y,size_x)
double_array = gateway.new_array(double_class,size_y,size_x)
尽管它能够正常工作,但它不是最快的方式,而且速度相对比较慢——对于一个1000x1000的数组,转换需要超过5分钟。
有没有什么方法可以在合理的时间内完成这个任务?
如果我尝试:
test=np.array(int_array)
我理解为:
ValueError: invalid __array_struct__