当项目满足条件时,numpy.where()返回空列表

时间:2017-08-10 16:50:20

标签: numpy h5py

我有一个数组,其值为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

1 个答案:

答案 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)