2016-11-10 42 views
3

我有.npy形状[512,512,x]的文件,其中x最大可达400.在这些数组中(这是正确的术语吗?我不确定正确的术语),有浮点数字在零和一之间。它们是噪声图像的灰度级别。图像是512x512像素和每个npy文件我有不同数量的图像保存。如何在R或MATLAB中打开3D .npy文件?

我现在想要做一些计算与噪声的图像,但一直无法导入R或MATLAB数组:

在RI试过RcppCNPy - 封装,并得到了错误“不支持的维度npyLoad” 。

在MATLAB中,我尝试了readNPY - 功能得到了错误“此文件不似乎是基于头部NumPy的格式。”但是我的文件没有标题。难道这个功能只适用于二维数组吗?

我怎么能访问我以前保存的3D数组?

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

+0

在R或在MATLAB?他们非常不同 –

+3

直接联系'readNpy'开发者。这个软件包太新了。 – hpaulj

+0

无论是R还是MATLAB,虽然我认为我更喜欢MATLAB解决方案... – lilla

回答

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 

没有顺序= F,倍频给

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)似乎不有所作为。

+0

谢谢,这对我很有用,而且易于使用 – lilla

+0

感谢您的订购注释!如果我理解正确,为了在NumPy中创建相同的MATLAB数值数组,我应该在创建数组时使用numpy.asfortranarray,对吗? – lilla

+0

试试吧。无论如何,savemat都可以做到。在前后版本中查看浪漫版本中的值的顺序。 'loadmat'给你'订购F'文件。 – hpaulj

0

如果您有权访问python和numpy,一种解决方法是使用np.load()加载.npy文件,然后使用np.savetxt()将它们保存为txt格式。

编辑:看来savetxt()不带3D阵列工作,所以在python2你可以使用文件()顺序的阵列的写入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) 

你也可以重塑到一个二维数组,使用savetxt,然后将其加载到csv/Matlab中并对其进行重新整形。

+0

谢谢你的想法。我只是尝试了它,但不幸的是,它不工作:只要数组是2D的,就没问题,但只要第三维大于1,它就会崩溃并显示错误:“数组dtype('float64 ')和格式说明符“。我的说明符是'%f',并且由于它对于第一个噪声图像可以正常工作,并且在生成第二个噪声图像后才会崩溃,所以我认为错误确实与数组的维数有关... – lilla

+0

如果您正在使用python2,你可以使用内置函数file()来保存数组的二维片段(请参阅我的编辑) –

+0

然后我会为每个片段获取一个新文件吗?由于切片对应于一个人的试用号码,所以我宁愿将它们放在一起... – lilla