python计算二进制图像中的数量

时间:2012-07-12 00:23:25

标签: python scipy

什么是python模块来计算二进制图像中的数量?

改写,

我有一个只有1和0的矩阵,它是numpy数组类型,我想知道有多少个。

4 个答案:

答案 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倍。如果你使用非常大的阵列并且需要良好的性能,这是一个很好的方法。