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)
は、より良い方法はありますか?これはそれを行うだろう
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
はい、これは私が多かれ少なかれ使う同じ解決策ではありませんか? –
@GMパフォーマンス面でははるかに優れています。 – miradulo
と私の小さなベンチマークからは、その程度の大きさです。 :) –
:
len(np.where(a==False))
はたぶん速いですか良く見て、他の方法があります。
1つの選択肢は、次のようになります。
np.bitwise_not(a).sum()
でも短く、多分それほど明確ではない:
(~a).sum()
明らかに明確なことは、必要なものを正確に尋ねることですが、それはそれを意味するものではありません最も効率的である:np.size(a) - np.count_nonzero(a)
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
明確な勝者は、大きさの順序によって、アンティHaapalaです:提案の回答でのpython 2.7でjupyter
に%%timeit
を使用して
は明確な勝者を与えます
len(np.where(a==False))
は、配列の入れ子構造によってペナルティを受けているようです。 1 D配列の同じベンチマークは10000 loops, best of 3: 27 µs per loop
これらをコンパイルしていただきありがとうございます! –
です。 'numpy.count_nonzero'の使い方 –
@AnttiHaapalaはnumpy.sum noを使用して同じですか?ただ真実を数えてください –