我有一个布尔类型的NumPy数组'boolarr' . 我想计算其值为 True 的元素数量 . 是否有专门用于此任务的NumPy或Python例程?或者,我是否需要迭代脚本中的元素?
True
这个问题为我解决了一个非常相似的问题,我认为我应该分享:
在原始python中,您可以使用sum()来计算dict中的True值:
>>> sum([True,True,True,False,False]) 3
但这不起作用:
>>> sum([[False, False, True], [True, False, True]]) TypeError...
也许这会对某人有所帮助 .
在比较两个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
1
D = 2的正确预测计数: 2
2
你有多种选择 . 以下两个选项 .
numpy.sum(boolarr) 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) >>> np.sum(boolarr) 5
当然,这是一个 bool 特定的答案 . 更一般地说,您可以使用 numpy.count_nonzero .
bool
numpy.count_nonzero
>>> np.count_nonzero(boolarr) 5
如果您希望按行计数,请将 axis=1 提供给 sum :
axis=1
sum
In [345]: boolarr Out[345]: array([[False, False, True], [ True, False, True], [ True, False, True]], dtype=bool) In [346]: boolarr.sum(axis=1) Out[346]: array([1, 2, 2])
同样,使用 np.count_nonzero :
np.count_nonzero
In [348]: np.count_nonzero(boolarr, axis=1) Out[348]: array([1, 2, 2])
4 回答
这个问题为我解决了一个非常相似的问题,我认为我应该分享:
在原始python中,您可以使用sum()来计算dict中的True值:
但这不起作用:
也许这会对某人有所帮助 .
在比较两个numpy数组和计算匹配数(例如机器学习中的正确类预测)方面,我发现以下两个维度的例子很有用:
可以扩展到D维度 .
结果是:
预测:
目标:
D = 1的正确预测计数:
1
D = 2的正确预测计数:
2
你有多种选择 . 以下两个选项 .
这是一个例子:
当然,这是一个
bool
特定的答案 . 更一般地说,您可以使用numpy.count_nonzero
.如果您希望按行计数,请将
axis=1
提供给sum
:同样,使用
np.count_nonzero
: