我有几个(最多几百个)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为单位的模型时间。
答案 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。