【问题标题】:Listing datasets in a group in HDF5在 HDF5 中列出组中的数据集
【发布时间】:2016-06-27 11:26:08
【问题描述】:

我决定使用 HDF5 的层次结构而不是依赖文件系统将我的数据存储在 HDF5 中。 很遗憾,我遇到了性能问题。

我的数据格式如下: 我有大约 70 个顶级组,对应于日期,每个组包含大约 8000 个数据集。 我想查看每天数据集数量的列表:

for date in hdf5.keys():
   print(len(hdf5[date]))

我发现这需要 2 秒以上/迭代,这有点令人沮丧。

另外,我有两个具有上述布局的不同 hdf5 文件,而较大的文件在这方面要慢得多。

我做错了什么?

【问题讨论】:

  • 如果您真的只想查看文件中有哪些数据集,我会使用 h5dumph5stat 实用程序。例如h5stat --dset <file> 将打印文件中所有数据集的信息。如果您想要不太详细的信息,只需使用h5dump -n <file>,它将打印一般文件内容,类似于ls -l
  • @bnaecker:我实际上正在寻找 python 中的解决方案。但是运行 h5stat --dset 需要 4 分 10 秒 :(

标签: python hdf5


【解决方案1】:

尝试使用 libver latest 标志创建文件:

f = h5py.File('name.hdf5', libver='latest') 

如果每个组有很多数据集或每个数据集有很多属性,这会更快。

【讨论】:

  • 谢谢约翰。我没有 %timeit,但从 2-3 秒/读取开始似乎没有明显的加速
  • 您使用的 hdf5 库是什么版本的?我创建了一个包含 70 个组的文件,每个组包含 8000 个数据集,并且能够在 0.45 秒内完成您描述的循环(对于整个文件)。
  • 另外,你可能会看到改进:“for date in hdf5”而不是:“for date in hdf5.keys()”。
  • 再次感谢约翰。不幸的是,问题似乎出在 hdf5 文件的大小上。代码在 5 GB 文件上的运行速度比在 20 GB 文件上的运行速度要快得多(布局相同)
  • 另外,我认为 .keys() 不是问题,我使用的是 python 3,它无论如何都会返回一个视图
猜你喜欢
  • 2014-09-07
  • 2020-07-31
  • 2015-11-07
  • 2020-03-18
  • 1970-01-01
  • 2011-09-05
  • 2016-01-24
  • 2019-04-04
  • 2021-11-09
相关资源
最近更新 更多