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