On Sat, Feb 23, 2013 at 4:51 PM, Jose Amoreira <ljmamoreira@gmail.com> wrote:
On Saturday, February 23, 2013 00:45:55 Brett Olsen wrote:
a = np.ones(30)
idx = np.array([2, 3, 2])
a += 2 * np.bincount(idx, minlength=len(a))
a
array([ 1., 1., 5., 3., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.])
Hi!
OK, but is there any reason why Santhu's first option doesn't work? Shouldn't it work?
It can't -- python limitation, unfixable by numpy. The += gets divided into two operations, and there's no way for numpy doing the "+" part to "see" that the two locations you are adding the value to are really "the same" location. There's a pull request to add a new ufunc method to solve this: https://github.com/numpy/numpy/pull/2821 So if/when that gets merged you'll be able to do: np.add.at(a, idx, 2) But it still needs some tweaking and has been stalled for a bit, so might be a good opportunity for someone to take on if they're interested in seeing this functionality... -n