如何从 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]]
我有一些 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]]