我正在尝试计算类似于以下的 np.array
中的 False
值:
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)
有更好的方法吗?
使用count_nonzero
函数来计算非零值(例如不是False
的值):
>>> np.size(a) - np.count_nonzero(a)
2
询问确切需求肯定是最清晰的方式,但并不意味着这是最高效的方式:
在使用Python 2.7和Jupyter时,使用%%timeit
对提供的答案进行测试,可以得出一个明确的获胜者:
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
.
a.size
比 np.size(a)
快大约10倍。另一个基准测试的替代方法可能是 np.count_nonzero(~a)
,虽然这不是最有效的方法。 - BottleNicklen(np.where(a==False))
也许还有其他更快或更好看的方法。一个替代方案是:
np.bitwise_not(a).sum()
(~a).sum()
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])
number_of_true = np.count_nonzero(arr1 >= arr2)
,不使用索引。 - Muhammad Yasirroni
numpy.count_nonzero
怎么样? - Antti Haapala -- Слава Україні