我需要将多个数据集合并到另一个属于最终文件的数据集中,每个数据集都包含在一个单独的文件中。 当在最终的数据集中复制时,部分数据集中的数据顺序不会被保留 - 部分数据集中的数据被映射'通过指数进入最后一个。我创建了两个列表,final_indices和partial_indices,并写道:
final_dataset = final_hdf5file['dataset']
partial_dataset = partial_hdf5file['dataset']
# here partial ad final_indices are lists.
final_dataset[final_indices] = partial_dataset[partial_indices]
问题在于性能非常糟糕 - 原因是final_和partial_indices都是列表。 我的解决方法是从最终和部分数据集创建两个np数组,并使用np数组作为索引。
final_array = np.array(final_dataset)
partial_array = np.array(partial_dataset)
# here partial ad final_indices are nd arrays.
final_array[final_indices] = partial_array[partial_indices]
然后将最终数组重新写入最终数据集。
final_dataset[...] = final_array
然而,在我看来这样做是相当不优雅的。
是否可以在h5py数据集中使用np.arrays作为索引?
答案 0 :(得分:1)
因此,您正在为读取和写入进行花式索引:
http://docs.h5py.org/en/latest/high/dataset.html#fancy-indexing
警告说长列表可能会很慢。
我可以看到读取和写入整个集合的位置,并且在数组上进行映射会更快,尽管我实际上没有测试过。读/写速度更快,映射
也是如此http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data
我会使用切片表示法(或value
)来加载数据集,但这只是一个小问题。
final_array = final_dataset[:]
如果代码看起来不合适,请隐藏它中的代码。
这个oneliner可能有用(我还没有测试过)。 RHS更有可能发挥作用。
final_dataset[:][final_indices] = partial_dataset[:][partial_indices]