查找numpy.where返回的值的数量

时间:2013-03-12 20:47:43

标签: python numpy

我想找到numpy.where评估为true的地方数量。以下解决方案有效,但非常难看。

b = np.where(a < 5)
num = (b[0]).shape[0]

我来自一种语言,我需要检查是否num&gt;在继续对结果数组执行某些操作之前为0。是否有一种更优雅的方式来获取num或更多Pythonic解决方案而不是找到num?

(对于熟悉IDL的人,我正在尝试复制其简单的b = where(a lt 5, num)。)

3 个答案:

答案 0 :(得分:6)

In [1]: import numpy as np

In [2]: arr = np.arange(10)

In [3]: np.count_nonzero(arr < 5)
Out[3]: 5 

In [4]: np.sum(arr < 5)
Out[4]: 5

如果您还是要定义b = np.where(arr < 5)[0],请使用len(b)b.sizelen()似乎要快一点,但它们在术语上几乎相同表现)。

答案 1 :(得分:0)

仅当where语句的条件暗示结果未计算为False时,此方法才有效。但那很简单:

import numpy as np
a = np.random.randint(1,11,100)
a_5 = a[np.where(a>5)]
a_10 = a[np.where(a>10)]
a_5.any() #True
a_10.any() #False

因此,如果您希望在分配之前可以尝试这一点,当然:

a[np.where(a>5)].any() #True
a[np.where(a>10)].any() #False

答案 2 :(得分:0)

另一种方式

In [14]: a = np.arange(100)
In [15]: np.where(a > 1000)[0].size > 0
Out[15]: False
In [16]: np.where(a > 10)[0].size > 0
Out[16]: True