python-如何使用h5py导入.mat-v7.3文件
作者:互联网
我有.mat文件,其中包含3个矩阵A,B,C.
实际上,我使用scipy.io如下导入了该mat文件.
data = sio.loadmat('/data.mat')
A = data['A']
B = data['B']
C = data['C']
但是,v7.3文件无法使用这种方式导入.
因此,我尝试使用h5py进行导入,但是我不知道如何使用h5py.
我的代码如下.
f = h5py.File('/data.mat', 'r')
A = f.get('/A')
A = np.array('A')
哪一部分错了?
谢谢!
解决方法:
在八度
>> A = [1,2,3;4,5,6];
>> B = [1,2,3,4];
>> save -hdf5 abc.h5 A B
在Ipython中
In [138]: import h5py
In [139]: f = h5py.File('abc.h5')
In [140]: list(f.keys())
Out[140]: ['A', 'B']
In [141]: list(f['A'].keys())
Out[141]: ['type', 'value']
In [142]: f['A']['value']
Out[142]: <HDF5 dataset "value": shape (3, 2), type "<f8">
In [143]: A = f['A']['value'][:]
In [144]: A
Out[144]:
array([[ 1., 4.],
[ 2., 5.],
[ 3., 6.]])
另请参见侧栏中的链接.
基本上,这是找到所需的数据集,然后按照http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data中所述加载它的问题
https://pypi.python.org/pypi/hdf5storage/0.1.14-该软件包具有MATLAB MAT v7.3文件支持.我还没用过
In [550]: import hdf5storage
In [560]: bar = hdf5storage.read(filename='abc.h5')
In [561]: bar
Out[561]:
array([ ([(b'matrix', [[ 1., 4.], [ 2., 5.], [ 3., 6.]])], [(b'matrix', [[ 1.], [ 2.], [ 3.], [ 4.]])])],
dtype=[('A', [('type', 'S7'), ('value', '<f8', (3, 2))], (1,)), ('B', [('type', 'S7'), ('value', '<f8', (4, 1))], (1,))])
因此,文件已作为具有形状(1,)和2个字段“ A”和“ B”(2个变量名称)的结构化数组加载.每个字段都有一个“类型”和“值”字段.
In [565]: bar['A']['value']
Out[565]:
array([[[[ 1., 4.],
[ 2., 5.],
[ 3., 6.]]]])
或使用其负载垫:
In [570]: out = hdf5storage.loadmat('abc.h5',appendmat=False)
In [571]: out
Out[571]:
{'A': array([(b'matrix', [[ 1., 4.], [ 2., 5.], [ 3., 6.]])],
dtype=[('type', 'S7'), ('value', '<f8', (3, 2))]),
'B': array([(b'matrix', [[ 1.], [ 2.], [ 3.], [ 4.]])],
dtype=[('type', 'S7'), ('value', '<f8', (4, 1))])}
out是一本字典:
In [572]: out['B']['value']
Out[572]:
array([[[ 1.],
[ 2.],
[ 3.],
[ 4.]]])
对于读取一个简单的MATLAB文件,这并没有增加太多.它可以添加更多的单元格或结构.但是对于编写兼容MATLAB的文件,这应该是一个很大的帮助(尽管编写一个文件可能会坚持使用scipy.io.savemat).
标签:python,hdf5,matlab,h5py,hdf5storage 来源: https://codeday.me/bug/20191013/1905664.html