我有几个(最多几百个)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。表索引是以毫秒为单位的模型时间。
最佳答案
在 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。
关于python - 如何将多个 hdf5 文件聚合成一个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868623/