matファイル(v7.3)をpythonで開く方法を教えて下さい
147 次查看(过去 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ファイルの内容が復元できません。
0 个评论
采纳的回答
交感神経優位なあかべぇ
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に保存した変数の呼び出し
更多回答(1 个)
Hiro Yoshino
2023-4-10
编辑:Hiro Yoshino
2023-4-10
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 連携の推奨方法です。
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 MATLAB の Python ライブラリ 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!