Как посчитать количество истинных элементов в массиве NumPy bool - PullRequest
143 голосов
/ 03 декабря 2011

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

Ответы [ 4 ]

212 голосов
/ 03 декабря 2011

У вас есть несколько вариантов.Вот два варианта:

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
27 голосов
/ 26 ноября 2012

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

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

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

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

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

Может быть, это кому-нибудь поможет.

3 голосов
/ 05 августа 2017

Если вы хотите сделать подсчет на строку, поставьте axis=1 в sum:

boolarr
# array([[False, False,  True],
#        [ True, False,  True],
#        [ True, False,  True]], dtype=bool)

boolarr.sum(axis=1)
# array([1, 2, 2])

Аналогично, с np.count_nonzero:

np.count_nonzero(boolarr, axis=1)
# array([1, 2, 2])
3 голосов
/ 06 июня 2017

С точки зрения сравнения двух числовых массивов и подсчета количества совпадений (например, правильное предсказание класса в машинном обучении), я нашел следующий пример для двух измерений:

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

...