如何将多个hdf5文件聚合为一个图像

时间:2017-10-21 22:12:24

标签: python pandas hdf5

我有几个(最多几百个)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数据帧。每个数据框中的列是从模型中的对象记录的1D numpy数组。列标识符是模型中对象的唯一ID。表索引是以ms为单位的模型时间。

1 个答案:

答案 0 :(得分: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。