我目前正在开发一个帮助程序类,用于将数据从Java ND-Array传输到Python numpy nd-array。 Java数组使用ND4J,我能够确定ND4J INDArray
的形状,步幅和行/列排序。
Py4j允许我本地从JVM传回bytearray
。但是,我对numpy不太熟悉,而且我不太清楚它是否有row or column ordering的优先权以及如果我给它bytearray
代表一个np.array(bytearray, shape)
我怎么能提供形状信息1D数据数据。
我能找到的最接近的问题是:Quickest way to convert 1D byte array to 2D numpy array
但是,它并没有告诉我很多提供明确的形状信息 - 它只适用于RGB图像数据。
所以我的问题是,我怎样才能做double
这样的事情?如何知道numpy的首选顺序,以便我可以准备传入的数据?
半回答了我的问题。看起来numpy确实允许通过其许多数组创建方法的额外参数进行特定排序:https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html
了解更多,我需要确保bytearray(从byte []转换)是正确的数据类型。它几乎总是float
,所以我应该传递numpy.float64
类型还是SELECT strftime('%H:%M:%S',start_date) FROM table LIMIT 100;
?
答案 0 :(得分:1)
你能做的是
np.array(bytearray).reshape(shape)
其中np.array()
的输出是一维数组,然后您将其重新整形为您想要的形状。请注意,重塑不会更改内存中的顺序,只会更改数据的查看方式。
当线性迭代默认的C风格NumPy数组the last dimension of your array will iterate the fastest时,这意味着
a[0,0,0]
a[0,0,1]
在内存中彼此相邻,而
a[0,0,0]
a[0,1,0]
不是。知道了这一点,你应该能够找出shape
参数。
第三,dtype=float
和dtype=np.float64
可互换,您可以通过比较确认
print np.arange(1, dtype=float).dtype
print np.arange(1, dtype=np.float64).dtype