a = np.ones(30) idx = np.array([2, 3, 2]) a += 2 * np.bincount(idx, minlength=len(a)) >>> a 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 On Fri, Feb 22, 2013 at 8:38 PM, santhu kumar <mesan...@gmail.com> wrote: > Sorry typo : > > a = np.ones(30) > idx = np.array([2,3,2]) # there is a duplicate index of 2 > a[idx] += 2 > > On Fri, Feb 22, 2013 at 8:35 PM, santhu kumar <mesan...@gmail.com> wrote: > >> Hi all, >> >> I dont want to run a loop for this but it should be possible using numpy >> "smart" ways. >> >> a = np.ones(30) >> idx = np.array([2,3,2]) # there is a duplicate index of 2 >> a += 2 >> >> >>>a >> array([ 1., 1., 3., 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.]) >> >> >> But if we do this : >> for i in range(idx.shape[0]): >> a[idx[i]] += 2 >> >> >>> a >> 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.]) >> >> How to achieve the second result without looping?? >> Thanks >> Santhosh >> > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > >
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion