Как подсчитать количество истинных элементов в массиве 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до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
Comments