matファイル(v7​.3)をpython​で開く方法を教えて下​さい

조회 수: 165 (최근 30일)
Yutaro Ueoka
Yutaro Ueoka 2023년 4월 6일
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ファイルの内容が復元できません。

채택된 답변

交感神経優位なあかべぇ
편집: 交感神経優位なあかべぇ 2023년 4월 9일
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
Yutaro Ueoka
Yutaro Ueoka 2023년 4월 19일
お返事遅くなってしまいすみません。
-v7で保存しても-v7.3同様のエラー文が出てきた気もするのですが、-v6だとこれで出来ました。
ありがとうございます!
交感神経優位なあかべぇ
解決したようでよかったです。
一応私の環境だと、-v7で動作しました。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hiro Yoshino
Hiro Yoshino 2023년 4월 10일
편집: Hiro Yoshino 2023년 4월 10일
MATLAB Engine を Python で利用するのはどうでしょうか? (推奨の MATLAB - Python 連携方法になります)
  1. MATLAB で **.mat としてデータを保存
  2. MATLAB Engine を使って Python から MATLAB 関数を利用
  3. 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 連携の推奨方法です。
  댓글 수: 2
Yutaro Ueoka
Yutaro Ueoka 2023년 4월 19일
お返事遅くなってしまいすみません。
matlab.engineをインストールするところまでは出来るのですが、importで色々エラーが出てしまいました。今回はもう .matファイルではなく、csvファイルで保存して、bzip2で圧縮してサーバーに投げるようにしました。
ただ、今回紹介していただいた方法がMATLAB-Python連携の推奨方法なのですね。今後また必要になればこちらを試して見ようと思います。ありがとうございます。
Hiro Yoshino
Hiro Yoshino 2023년 4월 19일
MATLAB - Python の互換性のシステム要求を満たしているか、今一度ご確認ください。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Python からの MATLAB の呼び出し에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!