web-dev-qa-db-ja.com

Pythonで.matファイルを読む

PythonでバイナリのMatlab .matファイルを読んで成功した経験のある人はいますか?

(私はscipyが.matファイルの読み込みをサポートしていると主張しましたが、失敗しました。scipyバージョン0.7.0をインストールしましたが、loadmat()メソッドが見つかりません)

313
Gilad Naor

愚かな私ioのインポートを忘れました...

import scipy.io
mat = scipy.io.loadmat('file.mat')
426
Gilad Naor

scipy.io.savematscipy.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
130
vikrantt

私は答えを読んだ後でさえも30分をねじ込みました。この回答がお役に立てば幸いです

最初にmatファイルを保存してください。

save('test.mat','-v7')

その後Pythonでは通常のロードマットを使用します

import scipy.io as sio
test = sio.loadmat('test.mat')
22

Matlab 2014b以降がインストールされている場合は、Python用の Matlabエンジン を使用できます。

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
11
Daniel

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と同じ方法で構造化する必要があります。つまり、dictliststrintfloatなどの単純なデータ型で構成する必要があります。

例:Pythonデータ構造をMATファイルに保存します。

from mat4py import savemat

savemat('datafile.mat', data)

パラメータdataは、変数を含むdictになります。

11
Cleb

ファイルを読む

import scipy.io
mat = scipy.io.loadmat(file_name)

マット変数の型を昆虫にする

print(type(mat))
#OUTPUT - <class 'dict'>

辞書内のキーは、matlab変数は、これらの変数に割り当てられたオブジェクトです

9
Daksh

MathWorks自身による Python用MATLABエンジン もあります。あなたがMatlabを持っているなら、これは考慮する価値があるかもしれません(私はそれを自分で試したことはありませんが、それは単にMatlabファイルを読むことよりもっと多くの機能を持っています)。しかし、私はそれが他のユーザに配布することが許されるかどうか知りません(それらの人がMatlabを持っていればおそらく問題ないでしょう。そうでなければNumPyが正しい方法でしょうか?)。

また、あなたがすべての基本をあなた自身でやりたいならば、MathWorks を提供します(リンクが変わったら、matfile_format.pdfまたはそのタイトルMAT-FILE Formatのためにグーグルを試みてください)ファイル形式の構造に関するドキュメント。私が個人的に考えたほど複雑ではありませんが、明らかにこれが最も簡単な方法ではありません。また、.mat-ファイルのいくつの機能をサポートするかによっても異なります。

私はいくつかの基本的な.mat-ファイルを読むことができる "小さな"(約700行)Pythonスクリプトを書きました。私はPythonのエキスパートでも初心者でもありません。それを書くのに約2日かかりました(上記のMathWorksのドキュメントを使用して)。私はたくさんの新しいことを学びました、そしてそれは(ほとんどの時間)とても楽しかったです。私が仕事中にPythonスクリプトを書いたので、私はそれを公開することができないのではないかと思います...しかし、私はここでいくつかのアドバイスを与えることができます:

  • まずドキュメントを読む
  • HEX-エディタ( HxD など)を使用して、解析したい参照.mat-ファイルを調べます。
  • Byteをtxtファイルに保存して各行に注釈を付けることで、各Byteの意味を理解してみてください。
  • クラスを使用して各データ要素を保存します(miCOMPRESSEDmiMATRIXmxDOUBLEmiINT32など)。
  • .mat- filesの構造は、データ要素をツリーデータ構造に保存するのに最適です。各ノードには1つのクラスとサブノードがあります
5
mozzbozz