Re: [Numpy-discussion] Array accumulation in numpy

2013-02-19 Thread Tony Ladd
Thanks to all for a very quick response. np.bincount does what I need.

Tony

On 02/19/2013 10:04 AM, Benjamin Root wrote:
>
>
> On Tue, Feb 19, 2013 at 10:00 AM, Tony Ladd  <mailto:tl...@che.ufl.edu>> 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.
>
> Would much appreciate any help - probably a really simple question.
>
> Thanks
>
> Tony
>
>
> I believe you are looking for the equivalent of accumarray in Matlab?
>
> Try this:
>
> http://www.scipy.org/Cookbook/AccumarrayLike
>
> It is a bit touchy about lists and 1-D numpy arrays, but it does the job.
> Also, I think somebody posted an optimized version for simple sums 
> recently to this list.
>
> Cheers!
> Ben Root
>
>
>
> ___
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

-- 
Tony Ladd

Chemical Engineering Department
University of Florida
Gainesville, Florida 32611-6005
USA

Email: tladd-"(AT)"-che.ufl.edu
Webhttp://ladd.che.ufl.edu

Tel:   (352)-392-6509
FAX:   (352)-392-9514



___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Array accumulation in numpy

2013-02-19 Thread Tony Ladd
Alan

Thanks - I felt sure there had to be an easy idea.

Best

Tony

On 02/19/2013 10:17 AM, Alan G Isaac wrote:
> x=[1,2,3,4,5,6]
> ind=[1,3,9,3,4,1]
> f=np.zeros(10)
> np.bincount(ind,x)
>
> hth,
> Alan Isaac
>
> ___
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

-- 
Tony Ladd

Chemical Engineering Department
University of Florida
Gainesville, Florida 32611-6005
USA

Email: tladd-"(AT)"-che.ufl.edu
Webhttp://ladd.che.ufl.edu

Tel:   (352)-392-6509
FAX:   (352)-392-9514



___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


[Numpy-discussion] Array accumulation in numpy

2013-02-19 Thread Tony Ladd
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.

Would much appreciate any help - probably a really simple question.

Thanks

Tony

-- 
Tony Ladd

Chemical Engineering Department
University of Florida
Gainesville, Florida 32611-6005
USA

Email: tladd-"(AT)"-che.ufl.edu
Webhttp://ladd.che.ufl.edu

Tel:   (352)-392-6509
FAX:   (352)-392-9514

___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion