2016-08-23 49 views
1

NumPy配列をJava配列に変換する方法がいくつかありますが、その逆もありません - JavaオブジェクトのデータをNumPy配列に戻す方法 - 配列のint[ ][ ]種類Java配列からNumPy配列(Py4J)への高速変換

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配列である:私はこのようなPythonスクリプトを持っています。 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) 

が、それは最速の方法ではなく、むしろゆっくりと作品 - 1000×1000列〜のために、変換が5分以上かかりました。

妥当な時間でこれを行う方法はありますか?

私がしようとした場合:

test=np.array(int_array) 

私が手:

ValueError: invalid __array_struct__ 

答えて

0

私はちょうど私が経由でJava側から得たスペクトルベクトル(Java配列)をプロットしようとすると、同様の問題を持っていましたpy4j。 ここで、Java ArrayからPythonリストへの変換は、list()関数によって実現されます。これは、これはあなたが私が言うことができない使用forループのネストされたよりも高速であるかどうか

vectors = space.getVectorsAsArray(); # Java array (MxN) 
wvl = space.getAverageWavelengths(); # Java array (N) 

wavelengths = list(wvl) 

import matplotlib.pyplot as mp 
mp.hold 
for i, dataset in enumerate(vectors): 
    mp.plot(wavelengths, list(dataset)) 

... numpyのアレイを埋めるためにそれを使用する方法など、いくつかの手がかりを与えるかもしれないが、それはまた、トリックを行います。

import numpy 
from numpy import array 
x = array(wavelengths) 
v = array(list(vectors)) 

mp.plot(x, numpy.rot90(v)) 
関連する問題