Відповіді:
У вас є кілька варіантів. Два варіанти - наступні.
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)
все-таки ~ 12x швидше.
Це питання вирішило для мене досить подібне питання, і я подумав, що мені слід поділитися:
У сирому пітоні ви можете використовувати 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