On Mon, Dec 21, 2009 at 6:35 AM, Pauli Virtanen <pav...@iki.fi> wrote: > Mon, 21 Dec 2009 09:35:08 +0000, Neil wrote: > [clip] >> I'm also interested to see if there are any answers to this; I came >> across a similar problem recently. It would have been convenient to do >> something like U[idx] += dU, but this didn't work because there were >> repeated indices in idx. Here's a short example that shows the problem: >> >> In [1]: U = np.array([1., 2., 3., 4.]) >> In [2]: dU = np.array([0.1, 0.1, 0.1, 0.1]) >> In [3]: idx = np.array([0, 1, 2, 0]) >> In [4]: U >> Out[4]: array([ 1., 2., 3., 4.]) >> In [5]: U[idx] >> Out[5]: array([ 1., 2., 3., 1.]) >> In [6]: U[idx] += dU >> In [7]: U >> Out[7]: array([ 1.1, 2.1, 3.1, 4. ]) >> >> Ideally U would end up as array([ 1.2, 2.1, 3.1, 4. ]) > > One solution could be to use bincount: > > d = np.bincount(idx, dU) > U[:len(d)] += d > > Also, bincount works only with scalar weights, so this is not a fully > vectorized solution. > > A dedicated function could be nice here.
Or what would be *very* useful in many applications, is to extend bincount to take nd weights. Josef > > -- > Pauli Virtanen > > _______________________________________________ > 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