【问题标题】:Getting multiple datasets from group in HDF5从 HDF5 中的组中获取多个数据集
【发布时间】:2017-01-07 01:04:39
【问题描述】:

我正在比较两个不同的 hdf5 文件以确保它们匹配。我想在 hdf5 文件中创建一个包含组中所有数据集的列表,以便我可以循环遍历所有数据集,而不是手动输入它们。我似乎无法找到这样做。目前我正在使用此代码获取数据集:

tdata21 = ft['/PACKET_0/0xeda9_data_0004']

集合的名称位于“PACKET_0”组中。整理完所有数据集后,我会在此循环中比较数据集中的数据:

for i in range(len(data1)):
   print "%d\t%g\t%g" % (i, data1[i],tdata1[i])
   if(data1[i]!=tdata1[i]):
     x="data file: data1 \nline:"+ str(i) + "\norgianl data:"  + str(data1[i]) + "\nrecieved data:" + str(tdata1[i]) + "\n\n"
     correct.append(x)

如果有一种更智能的方法来比较 hdf5 文件,我希望看到它,但主要是我只是在寻找一种方法来将组中所有数据集的名称放入列表中。谢谢

【问题讨论】:

  • 我知道这篇文章中存在类似的问题,但我不太明白,所以如果它适用于我的情况,有人可以解释如何使用它。 link
  • 你在使用 h5py 吗?添加该标签。 numpy 也是如此。
  • docs.h5py.org/en/latest/high/… - 像访问字典一样访问组的元素,包括 keys()items() 等的使用。

标签: python hdf5 h5py


【解决方案1】:

要获取 HDF5 组或文件中存在的数据集或组,只需在该组或文件上调用 list()。使用您的示例,您将拥有

datasets = list(ft['/PACKET_0'])

您也可以直接遍历它们,方法是:

for name, data in ft['/PACKET_0'].items():
    # do stuff for each dataset

如果您想比较两个数据集的相等性(即它们具有相同的数据),最简单的方法是这样做:

(dataset1.value == dataset2.value).all()

这会从每个数据集中返回 NumPy 数组,逐个元素地比较这些数组,如果它们到处匹配则返回 True,否则返回 False

您可以结合这两个概念来比较两个不同文件中的每个数据集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 2014-06-11
    • 2015-09-07
    • 2013-03-25
    • 2016-06-20
    • 2021-07-05
    • 2017-10-02
    • 2017-11-03
    相关资源
    最近更新 更多