array([ 1., 1., 5., 3., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.])
As for speed:
def loop(a, idx):
for i in idx:
a[i] += 2
def count(a, idx):
a += 2 * np.bincount(idx, minlength=len(a))
%timeit loop(np.ones(30), np.array([2, 3, 2]))
10000 loops, best of 3: 19.9 us per loop
%timeit count(np.ones(30), np.array(2, 3, 2]))
100000 loops, best of 3: 19.2 us per loop
So no big difference here. But go to larger systems and you'll see a huge difference:
%timeit loop(np.ones(10000), np.random.randint(10000, size=100000))
1 loops, best of 3: 260 ms per loop
%timeit count(np.ones(10000), np.random.randint(10000, size=100000))
100 loops, best of 3: 3.03 ms per loop.
~Brett