我目前正在研究一个帮助程序类,以将数据从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=float
和dtype=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/