この特定の質問は、MATLABアルゴリズムによって生成された大きなデータセットを処理して、Pythonアルゴリズムで処理できるようにする試みから生じています。
背景: MATLABに大きな配列(通常は20x20x40x15000 [i、j、k、frame])があり、Pythonで使用したいと考えています。そこで、配列を* .matファイルに保存し、scipy.io.loadmat(fname)
*。matファイルをnumpy配列に読み込むために使用します。ただし、Pythonで* .matファイル全体を読み込もうとすると、メモリエラーが発生するという問題が発生します。これを回避するために、*。matファイルを断片にスライスして、Python配列に一度に1つずつロードできるようにします。* .matをフレームで分割すると、15,000個の* .matファイルが作成され、(少なくともWindowsでは)すぐに操作するのが面倒になります。したがって、私の解決策は、zipファイルを使用することです。
質問: scipyを使用して、最初にファイルを現在の作業ディレクトリに解凍せずに、zipファイルから* .matファイルを直接読み取ることはできますか?
仕様: Python 2.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
試したコード:
mat=scipy.io.loadmat(zfile.read(fname))
このエラーが発生します:
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
mat=scipy.io.loadmat(zfile.open(fname))
このエラーが発生します:
fileobj.seek(0)
UnsupportedOperation: seek
データの取り扱いに関するその他の提案は大歓迎です。
ありがとう!