【发布时间】:2021-05-30 07:07:07
【问题描述】:
我有一组 MAT 文件,其中包含 matlab struct。该结构有一堆数组。我想打开文件并将它们全部传输到数组中。到目前为止,我已经编写了以下代码:
import h5py
>>> fs = h5py.File('statistics_VAD.mat','r')
>>> list(fs.keys())
['#refs#', 'data']
>>>
>>> fs['data'].visititems(lambda n,o:print(n, o))
C <HDF5 dataset "C": shape (100, 1), type "|O">
P <HDF5 dataset "P": shape (100, 1), type "|O">
V <HDF5 dataset "V": shape (100, 1), type "|O">
Wn <HDF5 dataset "Wn": shape (100, 1), type "|O">
X <HDF5 dataset "X": shape (100, 1), type "|O">
a <HDF5 dataset "a": shape (100, 1), type "|O">
dn <HDF5 dataset "dn": shape (100, 1), type "|O">
>>> struArray = fs['data']
>>> print(struArray['P'])
<HDF5 dataset "P": shape (100, 1), type "|O">
我不知道如何将HDF5 dataset "P" 转移到numpy 数组。任何建议将不胜感激
【问题讨论】:
-
arr=struArray['P'][:]是做什么的? -
@hpaulj 输出为
>>> arr=struArray['P'][:] >>> arr array([[<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], [<HDF5 object reference>], ...。 -
那些“对象引用”可能是
refs组中的项目,但我不知道h5py是否可以为您获取它们。scipy.io.loadmat可以处理旧样式的 .mat 文件,但即使在那里,结果也可能包含“不透明”元素。并非 matlab 保存到文件的所有内容都可以翻译成 numpy。 -
@hpaulj 因为我在 matlab 中使用此命令行来保存数据
save( 'statistics_VAD.mat','data', '-v7.3');我使用scipy.io.loadmat收到此错误:mat_contents = sio.loadmat(mat_fname) raise NotImplementedError('Please use HDF reader for matlab v7.3 files') NotImplementedError: Please use HDF reader for matlab v7.3 files -
我不建议你使用那个阅读器。
标签: matlab numpy-ndarray hdf5 h5py