从HDF5数据集中提取数据

问题描述 投票:0回答:1

我有一个要用h5py读取的mat文件,我需要提取np.arrays或其他形式的数据以对其进行分析并绘制图表。

in: data   = h5py.File('footprints/HuascoFP.mat','r')

FP     = data["FP"]
FP.keys() # ---> ['EC', 'LAS', 'MWS', 'OMS', 'datenumber', 'meteo']
OMS    = FP["OMS"]
OMS.keys() #----> ['fp1D', 'fp2D', 'posR', 'posT']
fp2d   = OMS["fp2D"]#----> ['FP', 'x', 'y']
FP     =fp2d["FP"]
print(FP)

out:<HDF5 dataset "FP": shape (475, 1), type "|O">'

[如果我尝试“ FP [:2]”,我会得到:([[],[]],dtype = object),没有任何数据。

想要你们的帮助

python numpy hdf5 h5py
1个回答
0
投票

我本来是要写评论的,但是太长了。这是我的答案的链接:SO_55566865:difference-between-two-ways-of-accessing-the-hdf5-group

很长。第一部分显示了如何取消对HDF5“对象引用”的引用。 (答案的其余部分特定于SVHN数据集。)

我将尝试适用于您的示例。 (我认为我没错,但是由于无法测试您的数据,可能会出现错误。)您代码中的data引用了一个文件对象。FP = data["FP"]引用称为“ FP”的顶级组,依此类推。

将所有组和数据集名称连接在一起,您的对象引用在这里:(我更改了名称以避免与'FP'的第一个值冲突)FP_arr = data["/FP/OMS/fp2D"]["FP"]

在我的示例中,

方法1显示了如何获取引用的对象。您从那里所做的工作取决于找到的数据。

fp2d["FP"] or data["/FP/OMS/fp2D"]["FP"]是对象引用的数组。将对象引用与文件对象结合起来以获取下一个对象。因此,使用您的命名:obj_ref=fp2d["FP"][0][0]是第一个对象参考。data[ fp2d["FP"][0][0] ]data[obj_ref]返回第一个对象。

您可以使用.name属性打印此对象的路径。对于上述对象:obj_ref_name = data[obj_ref].nameprint( obj_ref_name )

您可以通过比较三种访问引用对象的方式来了解其工作原理。以下各行指向同一对象,并应产生相同的输出:data[ fp2d["FP"][0][0] ]data[obj_ref]data[obj_ref_name]

然后您可以使用它继续查询数据。

附带说明:对象引用很难。当我第一次盯着他们工作时,我使用HDFView打开HDF5文件以“查看”发生了什么。用这种方式更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.