Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用h5py在python中读取HDF5格式的MATLAB文件_Python_Matlab_H5py - Fatal编程技术网

用h5py在python中读取HDF5格式的MATLAB文件

用h5py在python中读取HDF5格式的MATLAB文件,python,matlab,h5py,Python,Matlab,H5py,我正在尝试使用h5py库读取python中的HDF5格式MATLAB文件。该文件名为“Q_visSDF_accurate.mat”,有两个键:“filename”和“sdf”。“filename包含一个单元格数组字符串。“sdf”是一个包含浮点数的[600149380]矩阵。使用以下代码提取变量sdf没有问题: import h5py data = h5py.File("Q_visSDF_accurate.mat", 'r') sdf = data.get("sdf")[:,:] sdf = s

我正在尝试使用h5py库读取python中的HDF5格式MATLAB文件。该文件名为“Q_visSDF_accurate.mat”,有两个键:“filename”和“sdf”。“filename包含一个单元格数组字符串。“sdf”是一个包含浮点数的[600149380]矩阵。使用以下代码提取变量sdf没有问题:

import h5py
data = h5py.File("Q_visSDF_accurate.mat", 'r')
sdf = data.get("sdf")[:,:]
sdf = sdf.astype(float)
但是,我无法读取文件名变量。我尝试了:

filename = data.get("filename")[0]
但代码返回:

array([<HDF5 object reference>, <HDF5 object reference>,
   <HDF5 object reference>, ..., <HDF5 object reference>,
   <HDF5 object reference>, <HDF5 object reference>], dtype=object)
数组([,,
, ...,
,],数据类型=对象)

我可以取消引用filename变量的containt吗?使用HDF5存储包不是一个解决方案,因为它只适用于python 32位,并且只能读取matlab变量的子集。

在Octave中,我创建了一个包含单元格和矩阵的文件

>> xmat = [1,2,3;4,5,6;7,8,9];
>> xcell = {1,2,3;4,5,6;7,8,9};
>> save -hdf5 testmat.h5 xmat xcell
在带有
h5py
ipython
中,我发现该文件包含两个组

In [283]: F = h5py.File('../testmat.h5','r')
In [284]: list(F.keys())
Out[284]: ['xcell', 'xmat']
矩阵组有一个
类型
数据集:

In [285]: F['xmat']
Out[285]: <HDF5 group "/xmat" (2 members)>
In [286]: list(F['xmat'].keys())
Out[286]: ['type', 'value']
In [287]: F['xmat']['type']
Out[287]: <HDF5 dataset "type": shape (), type "|S7">
In [288]: F['xmat']['value']
Out[288]: <HDF5 dataset "value": shape (3, 3), type "<f8">
In [289]: F['xmat']['value'][:]
Out[289]: 
array([[ 1.,  4.,  7.],
       [ 2.,  5.,  8.],
       [ 3.,  6.,  9.]])
我必须使用
[…]
获取单元格的值,因为它是0d数组:

In [301]: F['xcell']['value']['_0']['value'][...]
Out[301]: array(1.0)
要真正复制这个问题,我应该创建字符串单元格值,但我认为这足以说明单元格是如何存储的——作为数据组中的命名数据集


我假设Octave h5存储与MATLAB兼容。

您是否尝试过使用
hdf5存储
?它可以将基于hdf5的.mat文件读取为更有用的形式。我相应地编辑了我的原始帖子。您解决了这个问题吗?我仍然无法解决您的确切问题
In [301]: F['xcell']['value']['_0']['value'][...]
Out[301]: array(1.0)