在一个NumPy数组中找出小于x的元素的索引

9
假设我有一个 numpy 数组,如下所示:
import numpy as np    
arr = np.array([10,1,2,5,6,2,3,8])

我该如何提取一个包含小于6的元素索引的数组,以获得以下结果:
np.array([1,2,3,5,6])

我希望有一个类似于np.nonzero()的函数,但不是测试非零值,而是测试小于x的值。


元素应该被排序吗?还是那只是一个“可能”的结果? - Willem Van Onsem
但是它不是测试非零值,而是测试小于x的值。那么进行测试吗?你已经提到了np.nonzero - Divakar
借鉴@Divakar的提示,False值会被解释为零。 - Paul H
是的,在阅读Psidom的回答后,我感到有点愚蠢。 - Steven G
3个回答

12
你可以在布尔掩码上使用numpy.flatnonzero,并返回“扁平化版本中非零的索引”:
np.flatnonzero(arr < 6)
# array([1, 2, 3, 5, 6])

1d数组的另一个选项是numpy.where

np.where(arr < 6)[0]
# array([1, 2, 3, 5, 6])

4
最简单的方法是通过

实现。
arr[arr<6]

2
这将给出而不是索引。 - Yauhen Yakimenka

2
我建议一种更清晰且容易理解的方法来完成此操作: 首先,找到条件成立的索引位置:
>> indices = arr < 6
>> indices
>> [False, True, True, True, False, True, False]

接下来,使用这些索引进行索引:
>> arr[indices]
>> [1, 2, 5, 2, 3]

或者用于在原始数组中找到正确的位置:
>> np.where(indices)[0]
>> [1, 2, 3, 5, 6]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接