У меня есть массив NumPy 'boolarr' типа boolean. Я хочу подсчитать количество элементов, значения которых True
. Есть ли программа NumPy или Python, предназначенная для этой задачи? Или мне нужно перебирать элементы в моем script?
Как подсчитать количество истинных элементов в массиве NumPy bool
Ответ 1
У вас есть несколько вариантов. Возможны два варианта.
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
Ответ 2
Этот вопрос решил для меня довольно похожий вопрос, и я подумал, что должен поделиться:
В сыром питоне вы можете использовать sum()
для подсчета значений True
в list
:
>>> sum([True,True,True,False,False])
3
Но это не сработает:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
Ответ 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
Ответ 4
Если вы хотите подсчитать количество строк, укажите 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])