如何在R或MATLAB中打开3D .npy文件?

时间:2016-11-10 13:42:11

标签: python arrays r matlab numpy

我有形状[512,512,x]的.npy文件,x最多可达400.在这些数组中(是正确的术语?我不确定正确的术语),有漂浮零点和一点之间的点数。它们是噪声图像的灰度级。图像是512x512像素,每个npy文件我保存的图像数量不同。

我现在想对噪声图像进行一些计算,但是无法在R或MATLAB中导入数组:

在R中我尝试了RcppCNPy - 包并得到错误“npyLoad中不支持的维度”。

在MATLAB中,我尝试了readNPY - 函数并得到错误“此文件似乎不是基于标题的NUMPY格式。”但我的文件没有标题。可能是该功能仅适用于2D阵列吗?

我怎样才能访问之前保存过的3D阵列?

非常感谢MATLAB或R中的任何帮助!

2 个答案:

答案 0 :(得分:2)

npy是一种独特的numpy文件格式。是的,它确实有一个包含版本,尺寸,步幅和dtype等信息的标题块。

快速浏览readNpy表明它相对较新且具有实验性。与他们核实能力。

np.savetxt写入文本CSV文件。这被广泛使用(查看关于np.genfromtxtnp.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中并重新整形。