我正在尝试计算False
中的np.array
值,如下所示:
import numpy as np
a = np.array([[True,True,True],[True,True,True],[True,False,False]])
我通常使用这种方法:
number_of_false=np.size(a)-np.sum(a)
有更好的方法吗?
答案 0 :(得分:8)
使用count_nonzero
计算非零(例如,不是False
)值:
>>> np.size(a) - np.count_nonzero(a)
2
答案 1 :(得分:6)
更清楚的是肯定要问确切需要什么,但这并不意味着它是最有效的:
在%%timeit
中使用jupyter
和python 2.7对提议的答案进行了明确的胜利:
seq = [[True, True, False, True, False, False, False] * 10 for _ in range(100)]
a = np.array(seq)
np.size(a) - np.count_nonzero(a) 1000000 loops, best of 3: 1.34 µs per loop - Antti Haapala
(~a).sum() 100000 loops, best of 3: 18.5 µs per loop - Paul H
np.size(a) - np.sum(a) 10000 loops, best of 3: 18.8 µs per loop - OP
len(a[a == False]) 10000 loops, best of 3: 52.4 µs per loop
len(np.where(a==False)) 10000 loops, best of 3: 77 µs per loop - Forzaa
.
明显的赢家是 Antti Haapala ,数量级为np.size(a) - np.count_nonzero(a)
len(np.where(a==False))
似乎受到数组嵌套结构的惩罚; 1 D阵列上的相同基准提供10000 loops, best of 3: 27 µs per loop
答案 2 :(得分:2)
这样就可以了:
len(np.where(a==False))
也许有其他更快或更好的方式。
答案 3 :(得分:2)
另一种选择是:
np.bitwise_not(a).sum()
更短,但可能不太清楚:
(~a).sum()
答案 4 :(得分:1)
number_of_false = np.size(out_putArray) - np.count_nonzero(out_putArray[0] >= out_putArray[1])
number_of_true = np.count_nonzero(out_putArray[0] >= out_putArray[1])