我目前正在研究一个帮助程序类,以将数据从Java ND-Array传输到Python numpy nd-array。 Java数组使用ND4J,我能够从ND4J INDArray确定形状,步幅和行/列顺序。

Py4j允许我从JVM本地回传bytearray。但是,我对numpy不太熟悉,我也不知道它是否偏爱row or column ordering,如果给我一个表示一维数据数组的bytearray,该如何提供形状信息。

我能找到的最接近的问题是:Quickest way to convert 1D byte array to 2D numpy array

但是,关于提供明确的形状信息并不能告诉我太多-它仅适用于RGB图像数据。

所以我的问题是,我该怎么做np.array(bytearray, shape)之类的东西,又如何知道numpy的首选顺序,以便准备传入的数据?

编辑

一半回答了我的问题。看起来numpy确实确实允许通过其许多数组创建方法上的额外参数进行特定排序:https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html

编辑2

学习更多,我需要确保字节数组(从byte []转换为正确的数据类型)。几乎总是double,所以我应该传递float类型还是numpy.float64

最佳答案

你能做的是

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=floatdtype=np.float64是可互换的,您可以通过比较来确认

print np.arange(1, dtype=float).dtype
print np.arange(1, dtype=np.float64).dtype

关于python - 首选排序并将一维字节数组转换为Numpy和数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42710769/

10-11 22:47
查看更多