次のコードでmatlabファイルを読み取ろうとしています
import scipy.io
mat = scipy.io.loadmat('test.mat')
そして、それは私に次のエラーを与えます
raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files
だから誰でも同じ問題を抱えていて、サンプルコードを喜ばせることができます
ありがとう
h5py
モジュール
import h5py
with h5py.File('test.mat', 'r') as f:
f.keys()
import h5py
import numpy as np
filepath = '/path/to/data.mat'
arrays = {}
f = h5py.File(filepath)
for k, v in f.items():
arrays[k] = np.array(v)
mATLAB構造がない限り、データはarrays
dictで終わるはずです。それが役に立てば幸い!
関連するスレッドに関する Magu_の回答ごとに 、v7.3 matlab matファイルを読み取るための便利な機能を備えたパッケージ hdf5storage を確認してください。それは簡単です
import hdf5storage
mat = hdf5storage.loadmat('test.mat')
私はこの問題を見ました: https://github.com/h5py/h5py/issues/726 。 -v7.3
オプションを使用してmatファイルを保存した場合、(Python 3.x)の下でキーのリストを生成する必要があります。
import h5py
with h5py.File('test.mat', 'r') as file:
print(list(file.keys()))
たとえば、変数a
にアクセスするには、同じトリックを使用する必要があります。
with h5py.File('test.mat', 'r') as file:
a = list(file['a'])
Scipyクックブックによると。 http://wiki.scipy.org/Cookbook/Reading_mat_files 、
Matlabのリリース7.3以降、matファイルは実際にはデフォルトでHDF5形式を使用して保存されます(保存時に-vXフラグを使用する場合を除き、Matlabの保存を参照してください)。これらのファイルは、Pythonを使用して、たとえばPyTablesまたはh5pyパッケージを使用して読み取ることができます。この時点では、Matlab構造の読み取りはサポートされていないようです。
おそらく、-vXフラグを使用してOctaveを再保存できます。
何時間にもわたる検索にも関わらず、Matlab v7.3構造にアクセスする方法も見つけられませんでした。この部分的な答えが誰かの助けになることを願っています。また、追加のポインタを見つけてとてもうれしいです。
そのため、([0] [0]はMatlabが次元にすべてを与えることから生じると思います):
f = h5py.File('filename', 'r')
f['varname'][0][0]
与える:<HDF5オブジェクト参照>
この参照を再びfに渡します。
f[f['varname'][0][0]]
これは配列を提供します:これをnumpy配列に変換し、値を抽出します(または再帰的に、別の<HDF5オブジェクト参照>:
np.array(f[f['varname'][0][0]])[0][0]
ディスクへのアクセスが遅い場合は、メモリへのロードが役立つ可能性があります。
さらに編集:最終的な回避策を探して無駄に検索した後(他の誰かがより良い解決策を持っていることを本当に願っています!)pythonからMatlabを呼び出しました。
eng = matlab.engine.start_matlab() # first fire up a Matlab instance
eng.quit()
eng = matlab.engine.connect_matlab() # or connect to an existing one
eng.sqrt(4.0)
x = 4.0
eng.workspace['y'] = x
a = eng.eval('sqrt(y)')
print(a)
x = eng.eval('parameterised_function_in_Matlab(1, 1)', nargout=1)
a = eng.eval('Structured_variable{1}{2}.object_name') # (nested cell, cell, object)