[Numpy-discussion] nicest way to apply an arbitrary sequence of row deltas to an array

George Dahl george.dahl at gmail.com
Mon Dec 21 13:55:14 EST 2009


So with bincount I can exchange a loop over P for a loop over M?  I
guess for me that is still really helpful.
Thanks!
- George

On Mon, Dec 21, 2009 at 6:35 AM, Pauli Virtanen <pav+sp at 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.
>
> --
> Pauli Virtanen
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list