После выполнения
bbins=np.bincount(b)
, почему бы не сделать:
a[:len(bbins)] += bbins
(Отредактировано для дальнейшего упрощения.)
Если b
является небольшим поддиапазоном a
, можно уточнить ответ Алока следующим образом:
import numpy as np
a = np.zeros( 100000, int )
b = np.array( [99999, 99997, 99999] )
blo, bhi = b.min(), b.max()
bbins = np.bincount( b - blo )
a[blo:bhi+1] += bbins
print a[blo:bhi+1] # 1 0 2
В numpy> = 1.8 вы также можете использовать метод at
добавления универсальной функции ('ufunc'). Как docs note :
Для добавления ufunc этот метод эквивалентен [индексам] + = b, за исключением того, что результаты накапливаются для элементов, которые индексируются больше чем один раз.
blockquote>Итак, возьмем ваш пример:
a = np.zeros(6).astype('int') b = [3, 2, 5, 2]
... затем ...
np.add.at(a, b, 1)
... оставит
a
как ...array([0, 0, 2, 1, 0, 1])
b = [99999, 99997, 99999]
иa = np.zeros(1000, 'int')
. Сроки: OP: 2,5 мс, мой: 495 us, простой цикл: 84 us. – Alok Singhal 5 January 2010 в 16:23