尽管我已经搜索了数小时,但仍然找不到如何访问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)