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

Numpy 是否可以在h5py数据集中使用np数组作为索引?,numpy,h5py,Numpy,H5py,我需要将多个数据集合并到属于最终文件的另一个数据集中,每个数据集包含在一个单独的文件中。 部分数据集中的数据在复制到最终数据集中时不会保留其顺序-部分数据集中的数据通过索引“映射”到最终数据集中。我创建了两个列表,最终索引和部分索引,并写道: final_dataset = final_hdf5file['dataset'] partial_dataset = partial_hdf5file['dataset'] # here partial ad final_indices are l

我需要将多个数据集合并到属于最终文件的另一个数据集中,每个数据集包含在一个单独的文件中。 部分数据集中的数据在复制到最终数据集中时不会保留其顺序-部分数据集中的数据通过索引“映射”到最终数据集中。我创建了两个列表,最终索引和部分索引,并写道:

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_u和partial_u索引都必须是列表。 我的解决方法是从最终数据集和部分数据集创建两个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.array作为索引?

因此,您正在为读写操作执行奇特的索引:

它警告说,如果列表很长,速度可能会很慢

我可以看到读取和写入整个集合的位置,以及在阵列上进行映射的速度会更快,尽管我还没有实际测试过这一点。读/写速度更快,映射也更快

我会使用切片表示法(或
)来加载数据集,但这是一个次要问题

final_array   = final_dataset[:]
如果函数看起来不美观,则将代码隐藏在函数中

这一行可能会工作(我还没有测试过)。RHS更有可能发挥作用

final_dataset[:][final_indices] = partial_dataset[:][partial_indices] 

感谢您的回答和链接-我的经验是,花式索引确实很慢。还没有尝试您的解决方案,但在应用相同原理时,看起来比我的更紧凑。