Как подсчитать количество истинных элементов в массиве numpy bool

У меня есть массив NumPy 'boolarr' логического типа. Я хочу подсчитать количество элементов, значения которых True. Есть ли процедура NumPy или Python, предназначенная для этой задачи? Или мне нужно перебирать элементы в моем скрипте?

4 ответов


у вас есть несколько вариантов. Есть два варианта.

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

этот вопрос решил для меня очень похожий вопрос, и я подумал, что должен поделиться:

в raw python вы можете использовать sum () для подсчета истинных значений в dict :

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

но это не сработает:

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

может быть, это поможет кому-то.


если вы хотите сделать подсчет строк, поставьте axis=1 to 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:

In [348]: np.count_nonzero(boolarr, axis=1)
Out[348]: array([1, 2, 2])

С точки зрения сравнения двух массивов 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