【问题标题】:How to aggregate multiple hdf5 files into a one image如何将多个 hdf5 文件聚合到一个图像中
【发布时间】:2017-10-30 18:33:43
【问题描述】:

我有几个(最多几百个)hdf5 文件,其中包含并行模拟的结果:每个计算节点创建一个独立的 hdf5 文件以避免任何同步问题。

有什么方法可以为 hdf5 文件中的所有数据创建一个“图像”,例如,这个“图像”看起来包含所有数据,但实际上它会提供来自其他文件的数据?

这里是我要找的:

   "data-node0.h5"
      spike/PopulationA -> pandas data frame columns=[0,3,6,9]
   "data-node1.h5"
      spike/PopulationA -> pandas data frame columns=[1,4,7,10]
   "data-node2.h5"
      spike/PopulationA -> pandas data frame columns=[2,5,8,11]
      spike/PopulationB -> pandas data frame columns=[0,1,2,3]

   "data.h5" = aggregate("data-node0.h5","data-node1.h5","data-node2.h5")
   "data.h5"
      spike/PopulationA -> pandas data frame columns=[0,1,2,3,4,5,6,7,8,9,10,11]
      spike/PopulationB -> pandas data frame columns=[0,1,2,3]

注意文件data.h5 不包含任何数据。它使用来自data-nodeX.h5 文件的数据。

更新 hdf5 文件中的数据是带有时间序列的 pandas 数据帧。每个数据框中的列是从模型中的对象记录的一维 numpy 数组。列标识符是模型中对象的唯一 ID。表索引是以毫秒为单位的模型时间。

【问题讨论】:

  • 虽然我不知道 hdf5,但你能展示生成一个 pandas 数据帧 image 文件的代码吗?你是什​​么意思聚合?您的意思是 append 还是 merge
  • @Parfait 这些都不是。我不知道是否可以创建这样的图像。每个 data-nodeX 文件都包含一组来自我模型中某些对象的记录。列的编号是对象的 ID。对象可以按群体分组,因此一些节点计算来自不同群体的对象。我想创建一些“虚拟”数据文件,看起来它包含所有数据,但它只是访问另一个数据文件并从那里提供数据。所有数据的集体形象。

标签: python pandas hdf5


【解决方案1】:

在 1.10+ 版本中,HDF5 添加了虚拟数据集功能,允许您将来自多个数据集的数据映射到顶级“虚拟”数据集,该数据集本身不存储数据。

文档在这里: https://support.hdfgroup.org/HDF5/docNewFeatures/NewFeaturesVirtualDatasetDocs.html

当然,复杂之处在于您看起来像是通过 Pandas 使用 PyTables,而不是原始 HDF5。 PyTables 是 HDF5,但在 HDF5 的组和数据集之上添加了一层结构和语义。为了创建基于 PyTables 的虚拟数据集,您将不得不深入研究 PyTables HDF5 对象的子结构来设置映射。此外,您创建的任何虚拟数据集都是常规的 HDF5 数据集,而不是 PyTables 表。考虑到 HDF5 的基本知识,这当然是可行的,尽管工作量可能比您希望的要多。

h5py(HDF5 的一个更底层且更直接的 Python 包装器)支持虚拟数据集功能,顺便说一句,因此您仍然可以在 Python 中执行所有操作,而不是通过 PyTables。

【讨论】:

  • 谢谢!但这不会虚拟化 pandas 数据帧,对吧?如果我理解正确,它将是虚拟文件中的一堆帧,而不是一个连贯的帧。如果是这样,不通过 h​​5py 框架的单个 numpy 数组是最好的选择。
  • 是的。我认同。 PyTables 很棒并且有很多方便的功能,但是 h5py 更灵活并且可以利用更高级的 HDF5 功能。有一些工作可以让两者更无缝地协同工作,但我不确定他们在这方面取得了多大的进展。
  • 虽然我会说 PyTables 的布局非常简单,如果我没记错的话。如果您在其中四处寻找(尝试使用 h5dump 和 h5ls 等 HDF5 命令行工具),您也许可以使用虚拟数据集功能来伪造功能齐全的 PyTables 数据表。
猜你喜欢
  • 2021-06-27
  • 2013-10-07
  • 2021-12-24
  • 2020-09-13
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多