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

211 次查看(过去 30 天)
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ファイルの内容が復元できません。

采纳的回答

交感神経優位なあかべぇ
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!