我有一个数组,其值为0-5,我想使用numpy.where()来获取项目等于1的索引,但它返回一个空数组。
代码:
hf = h5py.File(PATH+'/data.h5', 'r')
data = hf['data'] #dtype int32 [0,1,2,3,4,2,3,1,1,1,4,5,6]
print(data[1] == 1) #prints True
indices = np.where(data == 1)[0] #ERROR here - returns empty array
答案 0 :(得分:1)
您必须下载数据集才能执行此类测试。
使用我附带的测试文件:
In [318]: f = h5py.File('data.h5')
In [319]: list(f.keys())
Out[319]: ['dset', 'dset1', 'vset']
In [320]: f['dset']
Out[320]: <HDF5 dataset "dset": shape (3, 5), type "<f8">
我可以索引和测试单个项目或数据集切片
In [321]: f['dset'][1]
Out[321]: array([ 1., 1., 1., 1., 1.])
In [322]: f['dset'].shape
Out[322]: (3, 5)
In [323]: f['dset'][...]
Out[323]:
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
但是对数据集的布尔测试不起作用:
In [324]: f['dset']>0
...
TypeError: unorderable types: Dataset() > int()
==1
有效,但将数据集对象与1进行比较,并且不可避免地返回False
。这就是where
为您提供空结果的原因:
In [325]: f['dset']==1
Out[325]: False
要逐个元素测试,我必须索引&#39;数据集:
In [326]: f['dset'][...]>0
Out[326]:
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)