matファイル(v7.3)をpythonで開く方法を教えて下さい
154 views (last 30 days)
Show older comments
csvファイル→(matlabで読み込み→処理→matファイル保存)→matファイル → python読み込み
という流れが行いたいのですが、下記(===具体的なコード等=== 以下)のように上手くできません。
matlabで処理した後csvファイルに保存すると容量がとても大きく保存に掛かる時間、容量の問題があるためできればmatファイルで処理したいです。
- 上手く処理できる方法
- matファイルと同等の保存処理時間、容量で他にpythonに読み込みやすい形式
のどちらかをご存知の方がいらっしゃれば教えて頂きたいです。どうぞ宜しくお願い致します。
====具体的なコード等======================
a b c
1 5 9
2 6 10
3 7 11
4 8 12
上のようなcsvファイルtmp.csvをmatlabで
%% in matlab
tb = readtable('tmp.csv')
save("tmp.mat",'tb',"-v7.3")
としてtmp.matファイル(-v7.3)として保存します。
このtmp.matファイルをpythonのh5pyモジュールを用いて読み込もうとすると、
%% in python
>>> dfmat = h5py.File('tmp.mat','r')
>>> dfmat
<HDF5 file "tmp.mat" (mode r)>
>>> dfmat.keys()
<KeysViewHDF5 ['#refs#', '#subsystem#', 'tb']>
>>> pd.DataFrame(dfmat.get('tb'))
0 1 2 3 4 5
0 -587202560 2 1 1 1 1
>>> dfmat['tb'][0]
array([3707764736,2,1,1,1,1], dtype=uint32)
という形になってしまい、元のcsvファイルの内容が復元できません。
0 Comments
Accepted Answer
交感神経優位なあかべぇ
on 9 Apr 2023
Edited: 交感神経優位なあかべぇ
on 9 Apr 2023
scipyを使用した例を記述します。しかし、scipy.io.loadmatは、mat(-v7.3)は非対応ですので、mat(-v7)で保存しています。
%in matlab
tb = readtable('tmp.csv')
variableNames = tb.Properties.VariableNames;
% scipy.io.loadmatはテーブル型を読み込めないので、テーブル型をそれぞれの変数にして保存する。
for i = 1 : length(variableNames)
eval([variableNames{i}, '=tb{:,i};']);
end
save('tmp.mat', variableNames{:});% mat(-v7)で保存
%in python
import scipy
data = scipy.io.loadmat('tmp.mat')
a = data['a']% matに保存した変数の呼び出し
2 Comments
More Answers (1)
Hiro Yoshino
on 10 Apr 2023
Edited: Hiro Yoshino
on 10 Apr 2023
MATLAB Engine を Python で利用するのはどうでしょうか? (推奨の MATLAB - Python 連携方法になります)
- MATLAB で **.mat としてデータを保存
- MATLAB Engine を使って Python から MATLAB 関数を利用
- load 関数を Python から呼ぶ
以下、Python での実装:
import matlab.engine
eng = matlab.engine.start_matlab()
mat_data = eng.load("myMAT","myVariable")
print(mat_data)
mat_data は matlab.double で戻ってくるので、Python で使えるように変換する必要がありますが、この方法が MATLAB - Python 連携の推奨方法です。
See Also
Categories
Find more on MATLAB の Python ライブラリ in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!