最近、データを処理しているときに.matファイルに遭遇したので、理解と処理の手順を記録しました。
. matファイルはMatlabで一般的に使用されるデータ形式であり、形式はjsonのキーと値のペアに似ています。
{'__ header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020','__version__':'1.0','__globals__':[],'key1':array([[0,1]]),'key2':array([[3]])}
Pythonでは、.matファイルを操作するにはscipyが必要です。まず、インストールされていない場合は、以下を実行してください。
pip install scipy
import scipy.io as sio
data1 ={"key1":[0,1],"key2":3}
sio.savemat("save.mat",data1)
この時点で、現在のフォルダーの下に追加の「save.mat」ファイルがあることがわかります。
import scipy.io as sio
data1 ={"key1":[0,1],"key2":3}
# sio.savemat("save.mat",data1)
data2 = sio.loadmat("save.mat")print("data1: ",type(data1),data1)print("data2: ",type(data2),data2)
出力:
( ml) Y:\song\Codes\face_recall>python deal_data.py
data1:<class'dict'>{'key1':[0,1],'key2':3}
data2:<class'dict'>{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020','__version__':'1.0','__globals__':[],'key1':array([[0,1]]),'key2':array([[3]])}
マットファイルの内容が保存されると、いくつかの情報が自動的に追加されることがわかります:__ header 、 version 、 globals__
'__ header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020','__version__':'1.0','__globals__':[]
同時に、それはまだdict形式のデータです。変更されたリストまたはスケールは配列に変換されます。これはnumpy.arrayと見なすことができます。
操作3:マットファイルを変更する
import scipy.io as sio
data1 ={"key1":[0,1],"key2":3}
# sio.savemat("save.mat",data1)
data2 = sio.loadmat("save.mat")print("data1: ",type(data1),data1)print("data2: ",type(data2),data2)
data2["__version__"]="2.0"
data2["key2"]=4
sio.savemat("save.mat",data2)
data3 = sio.loadmat("save.mat")print("data3: ",type(data3),data3)
出力:
( ml) Y:\song\Codes\face_recall>python deal_data.py
data1:<class'dict'>{'key1':[0,1],'key2':3}
data2:<class'dict'>{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020','__version__':'1.0','__globals__':[],'key1':array([[0,1]]),'key2':array([[3]])}
data3:<class'dict'>{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:47:59 2020','__version__':'1.0','__globals__':[],'key1':array([[0,1]]),'key2':array([[4]])}
data2 ["key2"]が4に変更されており、 "__ version__"情報は変更できないことがわかります。 「__ * __」は組み込み情報であり、プライベート変数に類似しており、変更できないため、この質問が考慮されます。
1.では、scipyで保存されたデータが「 'MATLAB5.0」バージョンであり、v7.3バージョンの.matファイルがmatlabに大きなファイルを保存するためのフォーマットであることがわかります。上記の方法は読み取ることができません。現時点ではh5pyを使用する必要があり、次のようにインストールします。
pip install h5py
使用する
import h5py
data = h5py.File('data.mat')