「Pythonハンズオンラーニング」Python処理.matファイル

0. 引子##

最近、データを処理しているときに.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]])}

1. 実際の戦闘##

Pythonでは、.matファイルを操作するにはscipyが必要です。まず、インストールされていない場合は、以下を実行してください。

pip install scipy

操作1:マットファイルを保存する###

import scipy.io as sio

data1 ={"key1":[0,1],"key2":3}

sio.savemat("save.mat",data1)

この時点で、現在のフォルダーの下に追加の「save.mat」ファイルがあることがわかります。

操作2:マットファイルを読み取る###

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__"情報は変更できないことがわかります。 「__ * __」は組み込み情報であり、プライベート変数に類似しており、変更できないため、この質問が考慮されます。

2. 補足##

1.では、scipyで保存されたデータが「 'MATLAB5.0」バージョンであり、v7.3バージョンの.matファイルがmatlabに大きなファイルを保存するためのフォーマットであることがわかります。上記の方法は読み取ることができません。現時点ではh5pyを使用する必要があり、次のようにインストールします。

pip install h5py

使用する

import h5py 

data = h5py.File('data.mat')

- 1. 参照##

Recommended Posts

「Pythonハンズオンラーニング」Python処理.matファイル
python_ファイル処理
Pythonファイル操作
Python処理jsonの概要