如何统计NumPy布尔数组中为真的元素数量
我有一个名为 'boolarr' 的 NumPy 布尔数组,里面的值要么是 True
要么是 False
。我想统计一下里面有多少个值是 True
。请问有没有专门的 NumPy 或 Python 方法可以做到这一点?还是说我需要在我的代码里一个一个地去数?
6 个回答
5
在比较两个numpy数组并计算匹配数量(比如在机器学习中正确的分类预测)时,我发现下面这个二维的例子很有用:
import numpy as np
result = np.random.randint(3,size=(5,2)) # 5x2 random integer array
target = np.random.randint(3,size=(5,2)) # 5x2 random integer array
res = np.equal(result,target)
print result
print target
print np.sum(res[:,0])
print np.sum(res[:,1])
这个方法可以扩展到多维(D维)。
结果如下:
预测结果:
[[1 2]
[2 0]
[2 0]
[1 2]
[1 2]]
目标结果:
[[0 1]
[1 0]
[2 0]
[0 0]
[2 1]]
当维度D=1时,正确预测的数量是:1
当维度D=2时,正确预测的数量是:2
34
这个问题帮我解决了一个很相似的问题,我觉得应该分享一下:
在纯Python中,你可以用 sum()
来计算一个 list
中有多少个 True
值:
>>> sum([True,True,True,False,False])
3
但是这样做是行不通的:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
353
你有很多选择。这里有两个选项。
boolarr.sum()
numpy.count_nonzero(boolarr)
下面是一个例子:
>>> import numpy as np
>>> boolarr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]], dtype=np.bool)
>>> boolarr
array([[False, False, True],
[ True, False, True],
[ True, False, True]], dtype=bool)
>>> boolarr.sum()
5
当然,这个答案是针对bool
类型的。更一般来说,你可以使用numpy.count_nonzero
这个方法。
>>> np.count_nonzero(boolarr)
5