如何计算NumPy bool数组中的真元素数

2024-04-19 07:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个布尔类型的NumPy数组boolarr。我想计算值为True的元素数。是否有专门用于此任务的NumPy或Python例程?或者,我需要遍历脚本中的元素吗?


Tags: numpy脚本true元素类型数组例程boolarr
3条回答

通过比较两个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

你有多种选择。以下是两个选项。

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

>>> np.count_nonzero(boolarr)
5

这个问题为我解决了一个非常相似的问题,我想我应该分享一下:

在原始python中,可以使用sum()来计算True中的list值:

>>> sum([True,True,True,False,False])
3

但这行不通:

>>> sum([[False, False, True], [True, False, True]])
TypeError...

相关问题 更多 >