如何从 h5 数据集中访问随机索引?

How to access random indices from h5 data set?

我有一些 h5 数据,我想使用一些随机生成的索引从中抽样。但是,如果索引的顺序不是递增的,那么该努力就会失败。是否可以从 h5 数据集中 select 随机生成的索引?

这是引用错误的 MWE:

import h5py
import numpy as np
arr = np.random.random(50).reshape(10,5)
with h5py.File('example1.h5', 'w') as h5fw:
    h5fw.create_dataset('data', data=arr)

random_subset = h5py.File('example1.h5', 'r')['data'][[3, 1]]

# TypeError: Indexing elements must be in increasing order

可以对索引进行排序,但这样我们就失去了随机性成分。

一个可能的解决方案是按如下方式对所需索引进行预排序:

idx = np.sort([3,1])
random_subset = h5py.File('example1.h5', 'r')['data'][idx]

正如 hpaulj 所提到的,随机索引对于内存中的 numpy 数组来说不是问题。所以,是的,可以 select 具有随机生成索引的数据 从 h5 数据集中读取到 numpy 数组 。关键是有足够的内存来将数据集保存在内存中。下面的代码显示了如何执行此操作:

#random_subset = h5py.File('example1.h5', 'r')['data'][[3, 1]]
arr = h5py.File('example1.h5', 'r')['data'][:]
random_subset = arr[[3,1]]