Recently, there were several requests and discussions on this list about how to increment an array a in cells pointed to from a second integer array b (optionally by values from a third array c), such as:
> Yes, that'd be > a[b] += c > > On 10/8/06, Daniel Mahler <[EMAIL PROTECTED]> wrote: > > Is there a 'loop free' way to do this in Numeric > > > > for i in arange(l): > > a[b[i]]+=c[i] > > > > where l == len(b) == len(c) > > > > thanks > > Daniel > > or > It is clear to me that the numpy += operator in combination with the use > of arrays of indexes, as is explained in the Tentative Numpy Tutorial > > (http://www.scipy.org/Tentative_NumPy_Tutorial#head-3f4d28139e045a442f78c5218c379af64c2c8c9e), > > the limitation being that indexes that appear more than 1 time in the > indexes-array will get incremented only once. > > Does anybody know a way to work around this? > > I am using this to fill up a custom nd-histogram, and obviously each bin > should be able to get incremented more than once. Looping over the > entire array and incrementing each bin succesively takes waaay to long > (these are pretty large arrays, like 4000x2000 items, or even larger) I just came across a function that seems to provide the solution to both requests, which is called bincount. The first usecase could be written as a += bincount(b,c) (assuming a has already the right dimension, otherwise a = bincount(b,c) would create an array with the minimal required size), the second case is even simpler: counts = bincount(index) On my machine, this does 20M counting operations per second, which is _much_ faster than anything that could be done in an explicit for loop. Hope this helps, Andreas ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion