4

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

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

我来自一种语言,在对结果数组进行操作之前,我需要检查是否 num > 0。有没有比找到 num 更优雅的获取 num 的方法,或者更 Pythonic 的解决方案?

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

4

3 回答 3

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)or b.size(len()似乎快一点,但它们在性能方面几乎相同)。

于 2013-03-12T20:54:42.577 回答
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
于 2013-03-12T20:57:43.150 回答
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
于 2013-03-12T21:08:15.917 回答