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

150 vues (au cours des 30 derniers jours)
Yutaro Ueoka
Yutaro Ueoka le 6 Avr 2023
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ファイルの内容が復元できません。

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB の Python ライブラリ dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!