我有形状[512,512,x]的.npy文件,x最多可达400.在这些数组中(是正确的术语?我不确定正确的术语),有漂浮零点和一点之间的点数。它们是噪声图像的灰度级。图像是512x512像素,每个npy文件我保存的图像数量不同。
我现在想对噪声图像进行一些计算,但是无法在R或MATLAB中导入数组:
在R中我尝试了RcppCNPy - 包并得到错误“npyLoad中不支持的维度”。
在MATLAB中,我尝试了readNPY - 函数并得到错误“此文件似乎不是基于标题的NUMPY格式。”但我的文件没有标题。可能是该功能仅适用于2D阵列吗?
我怎样才能访问之前保存过的3D阵列?
非常感谢MATLAB或R中的任何帮助!
答案 0 :(得分:2)
npy
是一种独特的numpy
文件格式。是的,它确实有一个包含版本,尺寸,步幅和dtype等信息的标题块。
快速浏览readNpy
表明它相对较新且具有实验性。与他们核实能力。
np.savetxt
写入文本CSV
文件。这被广泛使用(查看关于np.genfromtxt
和np.loadtxt
的SO问题的数量),但是根据'纸张的性质而定。是2d - 列的行。我不知道编写高维数组的任何标准 - 重塑到2d和返回可能是最简单的。
scipy.io.savemat
可以编写MATLAB兼容的.mat
文件。这(和loadmat
)能够读/写更高的D数组,以及MATLAB结构和单元格。这是numpy
和MATLAB之间经过最佳测试的文件交换。
较新的MATLAB保存格式使用HDF5文件。 Python h5py
包也可以读写它们。关于读取由MATLAB生成的这种类型的文件有很多SO问题。 Python-created HDF5 dataset transposed in Matlab
请记住,MATLAB维度排序等同于numpy
' F'顺序。
比较
xf=np.arange(12).reshape(3,4,order='F') # saved with savemat
>> xf(:).' # in octave
ans =
0 1 2 3 4 5 6 7 8 9 10 11
没有order = F,octave给出
0 4 8 1 5 9 2 6 10 3 7 11
和
>> xf
xf =
0 3 6 9
1 4 7 10
2 5 8 11
>> x
x =
0 1 2 3
4 5 6 7
8 9 10 11
np.asfortranarray(x)
似乎无法发挥作用。
答案 1 :(得分:0)
如果您可以访问python和numpy,则解决方法是使用np.load()
加载.npy文件,然后使用np.savetxt()
以txt格式保存它们。
编辑:似乎savetxt()不能与3D数组一起使用,所以在python2中你可以使用file()顺序写出数组的2D条目:
import numpy as np
a = np.arange(60).reshape(3, 4, 5)
with file("test.txt", 'w') as f:
for slice in a:
np.savetxt(f, a)
您还可以将a重塑为2D数组,使用savetxt,然后将其加载到csv / Matlab中并重新整形。