什么是python模块来计算二进制图像中的数量?
改写,
我有一个只有1和0的矩阵,它是numpy数组类型,我想知道有多少个。
答案 0 :(得分:7)
您只需使用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
因为对于False / True,bools的整数值为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
答案 1 :(得分:1)
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,这将非常有用;否则为真。
答案 2 :(得分:0)
由于你只有1和0,你可以将它们全部加在一起:
import numpy as np
import operator as op
count_of_ones = reduce(op.add, np.ravel(your_array))
答案 3 :(得分: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倍。如果你使用非常大的阵列并且需要良好的性能,这是一个很好的方法。