我有形状为 [512, 512, x] 的 .npy 文件,其中 x 最大为 400。在这些数组中(这是正确的术语吗?我不确定正确的术语),有 float 零和一之间的点数。它们是噪声图像的灰度级。图像是 512x512 像素,每个 npy 文件我保存了不同数量的图像。
我现在想对噪声图像进行一些计算,但一直无法在 R 或 MATLAB 中导入数组:
在 R 中,我尝试了 RcppCNPy - 打包并收到错误“npyLoad 中不支持的维度”。
在 MATLAB 中,我尝试了 readNPY - 函数并收到错误“根据标题,此文件似乎不是 NUMPY 格式。”但是我的文件没有标题。难道这个函数只适用于二维数组?
如何访问我之前保存的 3D 数组?
非常感谢任何有关 MATLAB 或 R 的帮助!
最佳答案
npy
是一种独特的 numpy
文件格式。是的,它确实有一个标题 block ,其中包含版本、维度、步幅和 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)
似乎没有什么不同。
关于python - 如何在 R 或 MATLAB 中打开 3D .npy 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40529100/