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 日
編集済み: 交感神経優位なあかべぇ 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だとこれで出来ました。
ありがとうございます!
交感神経優位なあかべぇ
交感神経優位なあかべぇ 2023 年 4 月 19 日
解決したようでよかったです。
一応私の環境だと、-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 Center および File ExchangePython からの MATLAB の呼び出し についてさらに検索

Community Treasure Hunt

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

Start Hunting!