0

バイナリイメージ内の1の数をカウントするPythonモジュールとは何ですか?

言い換えれば、

1と0しかない行列があり、それはnumpy配列型であり、いくつあるか知りたいです。

4

4 に答える 4

8

あなたは単に使用することができますsum

>>> import numpy
>>> n = numpy.random.randint(0, 2, size=(3,3))
>>> n
array([[1, 0, 1],
       [0, 1, 1],
       [1, 1, 1]])
>>> n.sum()
7

boolsのFalse/Trueの整数値は0/1であるため、配列に0または1以外の要素が含まれている場合でも、このトリックの変形を使用できます。

>>> n = numpy.random.randint(0, 3, size=(3,3))
>>> n
array([[2, 2, 0],
       [0, 2, 0],
       [1, 1, 0]])
>>> n == 1
array([[False, False, False],
       [False, False, False],
       [ True,  True, False]], dtype=bool)
>>> (n == 1).sum()
2
于 2012-07-12T00:28:01.420 に答える
2

np.count_nonzero()は、バイナリ行列に対しても機能します。

In [1]: n = np.random.randint(0, 2, size=(3,3))

In [2]: n
Out[2]: 
array([[0, 1, 1],
       [0, 0, 0],
       [0, 1, 1]])

In [3]: np.count_nonzero(n)
Out[3]: 4

これは、0がFalseを意味する場合に役立ちます。それ以外の場合はTrue。

于 2012-07-12T13:02:59.643 に答える
0

(sum()アプローチと比較して)それを行うための非常に効率的な方法については、インデックスを使用する方が適切です。例えば:

import datetime
a = datetime.datetime.now()        
sum(spindle_gold)
b = datetime.datetime.now()
len(spindle_gold[(spindle_gold).astype(bool) ] )
c = datetime.datetime.now()

与える

0:00:02.155000 0:00:00.025000 3870970

したがって、この方法は約100倍高速です。非常に大きなアレイを使用していて、優れたパフォーマンスが必要な場合は、このアプローチが適しています。

于 2013-01-18T19:12:42.040 に答える
0

1と0しかないので、それらをすべて一緒に追加できます。

import numpy as np
import operator as op

count_of_ones = reduce(op.add, np.ravel(your_array))
于 2012-07-12T00:29:53.650 に答える