将matlab数据结构读入numpy数组

将matlab数据结构读入numpy数组,matlab,numpy-ndarray,hdf5,h5py,Matlab,Numpy Ndarray,Hdf5,H5py,我有一组MAT文件,其中包含一个matlabstruct。这个结构有很多数组。我想打开文件并将它们全部传输到数组中。到目前为止,我已经编写了以下代码: import h5py >>> fs = h5py.File('statistics_VAD.mat','r') >>> list(fs.keys()) ['#refs#', 'data'] >>> >>> fs['data'].visititems(lambda n,o:

我有一组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">
导入h5py
>>>fs=h5py.File('statistics_VAD.mat','r')
>>>列表(fs.keys())
['#参考#',“数据”]
>>> 
>>>fs['data'].访问权限(lambda n,o:print(n,o))
C
P
v
Wn
X
A.
dn
>>>struArray=fs['data']
>>>打印(数组['P'])

我不知道如何将
HDF5数据集“p”
传输到
numpy
数组。如有任何建议,将不胜感激。

以下代码是我在评论(dtd 2021-03-01)中提到的示例。它从NumPy数组创建2个数据集,然后创建一个包含2个对象引用的数据集,每个数据集引用1个。然后说明如何使用对象引用访问数据。为了完整性,还完成了带有区域引用的第二个数据集

请注意
h5f[]
是如何使用两次的:内部获取对象,外部获取对象引用中的数据。这是一个微妙之处,让用户对新的参考文献感到困惑

import numpy as np
import h5py

with h5py.File('SO_66410592.h5','w') as h5f :
    # Create 2 datasets using numpy arrays
    arr = np.arange(100).reshape(20,5)
    h5f.create_dataset('array1',data=arr)    
    arr = np.arange(100,0,-1).reshape(20,5)
    h5f.create_dataset('array2',data=arr) 
    
    # Create a dataset of OBJECT references: 
    h5f.create_dataset('O_refs', (10,), dtype=h5py.ref_dtype)
    h5f['O_refs'][0] = h5f['array1'].ref
    print (h5f['O_refs'][0])
    print (h5f[ h5f['O_refs'][0] ])
    print (h5f[ h5f['O_refs'][0] ][0,:])
    h5f['O_refs'][1] = h5f['array2'].ref
    print (h5f['O_refs'][1])
    print (h5f[ h5f['O_refs'][1] ])
    print (h5f[ h5f['O_refs'][1] ][-1,:])

    # Create a dataset of REGION references: 
    h5f.create_dataset('R_refs', (10,), dtype=h5py.regionref_dtype)
    h5f['R_refs'][0] = h5f['array1'].regionref[0,:]
    print (h5f['R_refs'][0])
    print (h5f[ h5f['R_refs'][0] ])    
    print (h5f[ h5f['R_refs'][0] ] [ h5f['R_refs'][0] ]) 
    h5f['R_refs'][1] = h5f['array2'].regionref[-1,:]
    print (h5f['R_refs'][1])
    print (h5f[ h5f['R_refs'][1] ])    
    print (h5f[ h5f['R_refs'][1] ] [ h5f['R_refs'][1] ]) 

arr=struArray['P'][:]
做什么?@hpaulj输出是
>>arr=struArray['P'][:]>>arr数组([[]、[]、[]、[]、[]、[]、[]、[]、[],…
。这些“对象引用”可能是
refs
组中的项,但我不知道
h5py
是否可以为您获取它们。
scipy.io.loadmat
可以处理旧样式的.mat文件,但即使在那里,结果也可能有“不透明”元素。并非matlab保存到文件中的所有内容都可以转换为numpy。@hpaulj因为我在matlab中使用这个命令行来保存数据
save('statistics_VAD.mat','data','-v7.3');
我使用
scipy.io.loadmat
得到这个错误:
mat\u contents=sio.loadmat(mat\u fname)引发NotImplementedError('请使用HDF reader for matlab v7.3文件')未实现错误:请使用HDF reader for matlab v7.3文件
我不建议您使用该读取器。