489

Python でバイナリ MATLAB .mat ファイルを読み取ることは可能ですか?

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

4

12 に答える 12

689

インポートが必要ですimport scipy.io...

import scipy.io
mat = scipy.io.loadmat('file.mat')
于 2009-05-17T12:16:13.443 に答える
192

どちらもscipy.io.savematscipy.io.loadmatMATLAB 配列バージョン 7.3 では機能しません。しかし良い点は、MATLAB バージョン 7.3 ファイルが hdf5 データセットであることです。そのため、 NumPyを含む多くのツールを使用して読み取ることができます。

Python の場合h5py、システムに HDF5 を必要とする拡張機能が必要です。

import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to a NumPy array
于 2013-10-12T23:06:48.453 に答える
15

ファイルの読み取り

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

MAT 変数の型の検査

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

ディクショナリ内のキーはMATLAB 変数であり、それらの変数に割り当てられたオブジェクトです

于 2018-03-05T17:10:41.377 に答える
10

MathWorks 自体によるPython 用の MATLAB エンジンもあります。MATLAB をお持ちの場合は、検討する価値があるかもしれません (私自身は試していませんが、MATLAB ファイルを読み取るだけでなく、より多くの機能を備えています)。ただし、それを他のユーザーに配布することが許可されているかどうかはわかりません (それらの人が MATLAB を持っている場合はおそらく問題ありません。そうでない場合は、NumPy が適切な方法でしょうか?)。

また、すべての基本を自分で行いたい場合、MathWorks はファイル形式の構造に関する詳細なドキュメントを提供します (リンクが変更された場合は、matfile_format.pdfまたはそのタイトルをグーグルで検索してください)。MAT-FILE Format個人的に思っていたほど複雑ではありませんが、明らかに、これが最も簡単な方法ではありません。.matまた、サポートしたいファイルの機能の数にも依存します。

いくつかの基本的なファイルを読み取ることができる「小さな」(約 700 行) Python スクリプトを作成し.matました。私は Python の専門家でも初心者でもありません。このコードを作成するのに約 2 日かかりました (上記のリンクにある MathWorks のドキュメントを使用)。たくさんの新しいことを学びましたが、とても楽しかったです (ほとんどの場合)。仕事でPythonスクリプトを書いたので、残念ながら公開できません...しかし、ここでいくつかのアドバイスをすることができます:

  • まずドキュメントを読んでください。
  • 16 進エディタ ( HxDなど) を使用して、解析する参照ファイルを調べ.matます。
  • バイトを .txt ファイルに保存し、各行に注釈を付けて、各バイトの意味を把握してみてください。
  • クラスを使用して各データ要素を保存します ( miCOMPRESSEDmiMATRIXmxDOUBLE、 などmiINT32) 。
  • -filesの.mat構造は、データ要素をツリー データ構造に保存するのに最適です。各ノードには 1 つのクラスとサブノードがあります
于 2014-10-10T09:16:28.483 に答える
8

データ型が混在する pandas dataFrame にマット ファイルを読み込むには

import scipy.io as sio
mat=sio.loadmat('file.mat')# load mat-file
mdata = mat['myVar']  # variable in mat file 
ndata = {n: mdata[n][0,0] for n in mdata.dtype.names}
Columns = [n for n, v in ndata.items() if v.size == 1]
d=dict((c, ndata[c][0]) for c in Columns)
df=pd.DataFrame.from_dict(d)
display(df)
于 2020-12-08T19:30:56.383 に答える
1
from os.path import dirname, join as pjoin
import scipy.io as sio
data_dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data')
mat_fname = pjoin(data_dir, 'testdouble_7.4_GLNX86.mat')
mat_contents = sio.loadmat(mat_fname)

上記のコードを使用して、デフォルトで保存された .mat ファイルを Python で読み取ることができます。

于 2019-11-19T10:48:07.360 に答える