如何加载具有错误数据类型标志的HDF5文件?

时间:2019-05-03 08:50:28

标签: python matlab hdf5

我有一个.h5 file,可以用Matlab,IDL和python读取。但是,Matlab和python都加载了此文件,但是数据集获得了数据类型H5T_STD_U16LE (uint16)。基本上,我有浮点值,这些值会在读取过程中转换为整数,使0.1之类的值变成0。

使用IDL进行读取会忽略HDF5文件中的内部标志,并为我提供适当的值。

在Matlab或python中是否有一种方法可以以双精度强制读取HDF5文件数据集?

在Matlab中,我这样做:

hinfo = hdf5info('./data.h5');
dset = hdf5read(hinfo.GroupHierarchy.Groups(1).Groups(1).Datasets(1));

在python中:

import h5py
f = h5py.File('./data.h5', 'r')
dset = f['entry']['data']['data']

1 个答案:

答案 0 :(得分:0)

重新解释Numpy中的数据

首先,请确保您知道实际的数据类型。您编写了float,但是必须知道确切的数据类型(float64,float32,float16)和顺序(Little,BigEndian)。

将float64解释为uint16并返回

import numpy as np
#copy the dset using np.copy()
#The following should be quite straight forward
A=np.ones(2)
print(A)
#Interpret the data as np.uint16
B=np.frombuffer(A,dtype=np.uint16)
print(B)
#Make the reverse
C=np.frombuffer(B,dtype=np.float64)
print(C)

[1. 1.]
[    0     0     0 16368     0     0     0 16368]
[1. 1.]