Ответы:
У вас есть несколько вариантов. Два варианта следующие.
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
bool
: логические значения обрабатываются как 1 и 0 в арифметических операциях. Смотрите " Булевы значения " в документации по стандартной библиотеке Python. Обратите внимание, что NumPy bool
и Python bool
не совпадают, но они совместимы (см. Здесь для получения дополнительной информации).
numpy.count_nonzero
отсутствия в NumPy v1.5.1: вы правы. Согласно этому сообщению , оно было добавлено в NumPy v1.6.0.
numpy.count_nonzero
примерно в тысячу раз быстрее, по крайней мере, в моем интерпретаторе Python. python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "np.count_nonzero(bools)"
vs.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "sum(bools)"
np.sum(bools)
вместо этого! Тем не менее, np.count_nonzero(bools)
все еще ~ 12 раз быстрее.
Этот вопрос решил для меня очень похожий вопрос, и я решил поделиться:
В сыром Python вы можете использовать sum()
для подсчета True
значений в list
:
>>> sum([True,True,True,False,False])
3
Но это не сработает:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
С точки зрения сравнения двух числовых массивов и подсчета количества совпадений (например, правильное предсказание классов в машинном обучении) я нашел следующий пример для двух измерений полезным:
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