gpt4 book ai didi

python - 如何通过 h5py 读取 v7.3 mat 文件?

转载 作者:太空狗 更新时间:2023-10-29 17:20:10 30 4
gpt4 key购买 nike

我有一个由 matlab 创建并存储在 v7.3 格式的 mat 文件中的结构数组:

struArray = struct('name', {'one', 'two', 'three'}, 
'id', {1,2,3},
'data', {[1:10], [3:9], [0]})
save('test.mat', 'struArray', '-v7.3')

现在我想使用 h5py 通过 python 读取这个文件:

data = h5py.File('test.mat')
struArray = data['/struArray']

我不知道如何从 struArray 中一个一个地获取结构数据:

for index in range(<the size of struArray>):
elem = <the index th struct in struArray>
name = <the name of elem>
id = <the id of elem>
data = <the data of elem>

最佳答案

Matlab 7.3 文件格式不太容易与 h5py 一起使用。它依赖于 HDF5 引用,cf。 h5py documentation on references .

>>> import h5py
>>> f = h5py.File('test.mat')
>>> list(f.keys())
['#refs#', 'struArray']
>>> struArray = f['struArray']
>>> struArray['name'][0, 0] # this is the HDF5 reference
<HDF5 object reference>
>>> f[struArray['name'][0, 0]].value # this is the actual data
array([[111],
[110],
[101]], dtype=uint16)

读取struArray(i).id:

>>> f[struArray['id'][0, 0]][0, 0]
1.0
>>> f[struArray['id'][1, 0]][0, 0]
2.0
>>> f[struArray['id'][2, 0]][0, 0]
3.0

请注意,Matlab 将数字存储为大小为 (1, 1) 的数组,因此最终 [0, 0] 会获取该数字。

读取struArray(i).data:

>>> f[struArray['data'][0, 0]].value
array([[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 5.],
[ 6.],
[ 7.],
[ 8.],
[ 9.],
[ 10.]])

要读取struArray(i).name,需要将整数数组转换为字符串:

>>> f[struArray['name'][0, 0]].value.tobytes()[::2].decode()
'one'
>>> f[struArray['name'][1, 0]].value.tobytes()[::2].decode()
'two'
>>> f[struArray['name'][2, 0]].value.tobytes()[::2].decode()
'three'

关于python - 如何通过 h5py 读取 v7.3 mat 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19310808/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com