我需要将多个数据集(每个数据集包含在一个单独的文件中)合并到属于最终文件的另一个数据集中。
当部分数据集中的数据被复制到最终数据集中时,它们的顺序不会保留 - 部分数据集中的数据通过索引“映射”到最终数据集中。我创建了两个列表,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
然而,在我看来,这样做很不雅观。
是否可以使用 np.arrays 作为 h5py 数据集中的索引?
所以你正在为读取和写入做花式索引:
http://docs.h5py.org/en/latest/high/dataset.html#fancy-indexing http://docs.h5py.org/en/latest/high/dataset.html#fancy-indexing
它警告说,长列表可能会很慢。
我可以看到在哪里读取和写入整个集合以及在数组上进行映射会更快,尽管我还没有实际测试过。读/写速度更快,映射速度也更快
http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data 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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)