On Tue, 2013-02-19 at 10:00 -0500, Tony Ladd wrote: > I want to accumulate elements of a vector (x) to an array (f) based on > an index list (ind). > > For example: > > x=[1,2,3,4,5,6] > ind=[1,3,9,3,4,1] > f=np.zeros(10) > > What I want would be produced by the loop > > for i=range(6): > f[ind[i]]=f[ind[i]]+x[i] > > The answer is f=array([ 0., 7., 0., 6., 5., 0., 0., 0., 0., 3.]) > > When I try to use implicit arguments > > f[ind]=f[ind]+x > > I get f=array([ 0., 6., 0., 4., 5., 0., 0., 0., 0., 3.]) > > > So it takes the last value of x that is pointed to by ind and adds it to > f, but its the wrong answer when there are repeats of the same entry in > ind (e.g. 3 or 1) > > I realize my code is incorrect, but is there a way to make numpy > accumulate without using loops? I would have thought so but I cannot > find anything in the documentation. >
You might be interested in this: https://github.com/numpy/numpy/pull/2821 But anyway, you should however be able to do what you want to do using np.bincount with the weights keyword argument. Regards, Sebastian > Would much appreciate any help - probably a really simple question. > > Thanks > > Tony > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion