PythonでバイナリのMatlab .matファイルを読んで成功した経験のある人はいますか?
(私はscipy
が.matファイルの読み込みをサポートしていると主張しましたが、失敗しました。scipy
バージョン0.7.0をインストールしましたが、loadmat()
メソッドが見つかりません)
愚かな私ioのインポートを忘れました...
import scipy.io
mat = scipy.io.loadmat('file.mat')
scipy.io.savemat
もscipy.io.loadmat
もmatlab配列では動作しません--v7.3。しかし良い部分は、matlab - v7.3ファイルがhdf5データセットであるということです。それで、それらは、でこぼこを含む多くのツールを使って読むことができます。
Pythonの場合、あなたのシステムにHDF5が必要なh5py
拡張子が必要になります。
import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to numpy array
私は答えを読んだ後でさえも30分をねじ込みました。この回答がお役に立てば幸いです
最初にmatファイルを保存してください。
save('test.mat','-v7')
その後Pythonでは通常のロードマットを使用します
import scipy.io as sio
test = sio.loadmat('test.mat')
Matlab 2014b以降がインストールされている場合は、Python用の Matlabエンジン を使用できます。
import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
mat4py
というNiceパッケージがあり、これを使って簡単にインストールできます。
pip install mat4py
(Webサイトから)使用するのは簡単です。
MATファイルからデータをロードします
関数loadmat
は、Pythonのdict
およびlist
オブジェクトのみを使用して、MATファイルに格納されているすべての変数を単純なPythonデータ構造にロードします。数値配列とセル配列は、行順の入れ子リストに変換されます。配列は、要素が1つしかない配列を排除するために圧縮されています。結果のデータ構造は、JSON
フォーマットと互換性のある単純型から構成されます。
例:MATファイルをPythonデータ構造にロードします。
from mat4py import loadmat
data = loadmat('datafile.mat')
変数data
は、MATファイルに含まれる変数と値を持つdict
です。
Pythonデータ構造をMATファイルに保存する
Pythonデータは、関数savemat
を使ってMATファイルに保存できます。データはloadmat
と同じ方法で構造化する必要があります。つまり、dict
、list
、str
、int
、float
などの単純なデータ型で構成する必要があります。
例:Pythonデータ構造をMATファイルに保存します。
from mat4py import savemat
savemat('datafile.mat', data)
パラメータdata
は、変数を含むdict
になります。
ファイルを読む
import scipy.io
mat = scipy.io.loadmat(file_name)
マット変数の型を昆虫にする
print(type(mat))
#OUTPUT - <class 'dict'>
辞書内のキーは、matlab変数と値は、これらの変数に割り当てられたオブジェクトです。 )
MathWorks自身による Python用MATLABエンジン もあります。あなたがMatlabを持っているなら、これは考慮する価値があるかもしれません(私はそれを自分で試したことはありませんが、それは単にMatlabファイルを読むことよりもっと多くの機能を持っています)。しかし、私はそれが他のユーザに配布することが許されるかどうか知りません(それらの人がMatlabを持っていればおそらく問題ないでしょう。そうでなければNumPyが正しい方法でしょうか?)。
また、あなたがすべての基本をあなた自身でやりたいならば、MathWorks は を提供します(リンクが変わったら、matfile_format.pdf
またはそのタイトルMAT-FILE Format
のためにグーグルを試みてください)ファイル形式の構造に関するドキュメント。私が個人的に考えたほど複雑ではありませんが、明らかにこれが最も簡単な方法ではありません。また、.mat
-ファイルのいくつの機能をサポートするかによっても異なります。
私はいくつかの基本的な.mat
-ファイルを読むことができる "小さな"(約700行)Pythonスクリプトを書きました。私はPythonのエキスパートでも初心者でもありません。それを書くのに約2日かかりました(上記のMathWorksのドキュメントを使用して)。私はたくさんの新しいことを学びました、そしてそれは(ほとんどの時間)とても楽しかったです。私が仕事中にPythonスクリプトを書いたので、私はそれを公開することができないのではないかと思います...しかし、私はここでいくつかのアドバイスを与えることができます:
.mat
-ファイルを調べます。miCOMPRESSED
、miMATRIX
、mxDOUBLE
、miINT32
など)。.mat
- filesの構造は、データ要素をツリーデータ構造に保存するのに最適です。各ノードには1つのクラスとサブノードがあります