是否可以使用np数组作为h5py数据集中的索引?

时间:2017-12-19 13:45:51

标签: numpy h5py

我需要将多个数据集合并到另一个属于最终文件的数据集中,每个数据集都包含在一个单独的文件中。 当在最终的数据集中复制时,部分数据集中的数据顺序不会被保留 - 部分数据集中的数据被映射'通过指数进入最后一个。我创建了两个列表,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作为索引?

1 个答案:

答案 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]