我有一个样本h5py文件,其中:
data = f['data']
#
# is arange(18).reshape(3,6)
ind=np.where(data[:]%2)[0]
# array([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int32)
data[ind] # getitem only works with boolean arrays error
data[ind.tolist()] # can't read data (Dataset: Read failed) error
最后一个错误是由列表中的重复值引起的.
但是使用具有唯一值的列表建立索引可以很好地工作
In [150]: data[[0,2]]
Out[150]:
array([[ 0, 1, 2, 3, 4, 5],
[12, 13, 14, 15, 16, 17]])
In [151]: data[:,[0,3,5]]
Out[151]:
array([[ 0, 3, 5],
[ 6, 9, 11],
[12, 15, 17]])
具有适当维数切片的数组也是如此:
In [157]: data[ind[[0,3,6]],:]
Out[157]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
In [165]: f['data'][:2,np.array([0,3,5])]
Out[165]:
array([[ 0, 3, 5],
[ 6, 9, 11]])
In [166]: f['data'][[0,1],np.array([0,3,5])]
# errror about only one indexing array allowed
因此,如果索引正确-唯一值,并且与数组尺寸匹配,它应该可以工作.
我的简单示例未测试加载了多少数组.文档听起来好像是从文件中选择了元素,而没有将整个数组加载到内存中.