这个特定的问题源于试图处理由MATLAB算法生成的大数据集,以便我可以用python算法处理它们。在
背景:我在MATLAB中有大数组(通常是20x20x40x15000[I,j,k,frame]),我想在python中使用它们。因此,我将数组保存到*.mat文件中,并使用scipy.io.loadmat(fname)将*.mat文件读入numpy数组。但是,如果我试图用python加载整个*.mat文件,就会出现内存错误。为了解决这个问题,我将*.mat文件分成几部分,这样我就可以一次一个地将这些片段加载到python数组中。如果按帧划分*.mat文件,我现在有15000个*.mat文件,这很快就变得很难处理(至少在windows中是这样)。所以我的解决方案是使用压缩文件。在
问题:是否可以使用scipy直接从压缩文件中读取*.mat文件,而无需先将文件解压缩到当前工作目录中?在
规格:Python2.7,windows xp
当前代码:import scipy.io
import zipfile
import numpy as np
def readZip(zfilename,dim,frames):
data=np.zeros((dim[0],dim[1],dim[2],frames),dtype=np.float32)
zfile = zipfile.ZipFile( zfilename, "r" )
i=0
for info in zfile.infolist():
fname = info.filename
zfile.extract(fname)
mat=scipy.io.loadmat(fname)
data[:,:,:,i]=mat['export']
mat.clear()
i=i+1
return data
尝试过的代码:
^{pr2}$
产生此错误:TypeError: file() argument 1 must be encoded string without NULL bytes, not strmat=scipy.io.loadmat(zfile.open(fname))
产生此错误:fileobj.seek(0)
UnsupportedOperation: seek
如有任何其他关于处理数据的建议,我们将不胜感激。在
谢谢!在