【发布时间】:2017-05-25 04:05:57
【问题描述】:
我有几个大型 hdf5 文件的列表,每个文件都有一个 4D 数据集。我想在第一个轴上获得它们的串联,例如,一个类似数组的对象,就像所有数据集都被串联一样。我的最终意图是多次沿同一轴顺序读取数据块(例如[0:100,:,:,:]、[100:200,:,:,:]、...)。
h5py 中的数据集共享 numpy 数组 API 的重要部分,这允许我调用 numpy.concatenate 来完成工作:
files = [h5.File(name, 'r') for name in filenames]
X = np.concatenate([f['data'] for f in files], axis=0)
另一方面,内存布局不一样,它们之间不能共享内存(related question)。唉,concatenate 会急切地将每个类似数组的对象的全部内容复制到一个新数组中,这在我的用例中是我无法接受的。数组连接函数的source code 证实了这一点。
如何获得多个类似数组的对象的串联视图, 不急切地将它们读入内存?就这个视图而言,对这个视图进行切片和索引就像我有一个串联数组一样。
我可以想象编写一个自定义包装器会起作用,但我想知道这样的实现是否已经作为库存在,或者是否有其他解决方案可用并且同样可行。到目前为止,我的搜索没有产生任何此类结果。我也愿意接受针对 h5py 的解决方案。
【问题讨论】:
标签: python numpy multidimensional-array h5py