[Numpy-discussion] Fwd: Advanced selection, duplicate indices, and augmented assignment

Travis Oliphant oliphant at ee.byu.edu
Mon Jan 8 13:04:22 EST 2007


Timothy Hochberg wrote:

>
>
> On 1/6/07, *Travis Oliphant* <oliphant at ee.byu.edu 
> <mailto:oliphant at ee.byu.edu>> wrote:
>
>     Timothy Hochberg wrote:
>     >
>     >
>     >
>     > On 1/6/07, *Robert Kern* < robert.kern at gmail.com
>     <mailto:robert.kern at gmail.com>
>     > <mailto:robert.kern at gmail.com <mailto:robert.kern at gmail.com>>>
>     wrote:
>     >
>     >     Sean R. Lynch wrote:
>     >
>     >     >>>> x = zeros((3,))
>     >     >>>> x[array([0, 1, 1])] += array([1, 1, 1])
>     >     >>>> x
>     >     > array([ 1.,  1.,  0.])
>     >     >
>     >     > If this worked the way I was hoping, the output would be
>     [1 2 0]
>     >     because
>     >     > it would add to element 1 twice due to its duplication in the
>     >     advanced
>     >     > selection array.
>     >     >
>     >     > Is the current behavior intentional or is it an accident of
>     >     > implementation?
>     >
>     >     It is an unavoidable consequence of the way Python
>     interprets that
>     >     code and the
>     >     way numpy arrays are fundamentally implemented. See Travis
>     >     Oliphant's, Tim
>     >     Hochberg's and my posts in the thread "Histograms via indirect
>     >     index arrays" for
>     >     more details.
>     >
>     >    
>     http://projects.scipy.org/pipermail/numpy-discussion/2006-March/thread.html#6877
>
>     >
>     >
>     > Do we have to revisit that thread? I seem to recall it getting
>     kind of
>     > cranky. To avoid reliving that, I will attempt dredge up the
>     relevant
>     > issue:
>     >
>     > "a[indx]+=b" should be the same as "a[indx]=a[indx]+b". All else
>     > follow from that. If staring at that for a while doesn't enlighten
>     > you, then you will have to read that thread.
>     >
>     > [ I suspect that in theory we could make the += form behave as you
>     > expect, but that would break the identity above, which would
>     confuse a
>     > bunch of people]
>     >
>
>     I don't think we could make it work as he expects (and not radically
>     change NumPy itself so that other operations are very different)
>     because
>     of the limitations of Python.
>
>     The point was that it is too complicated to do any differently (and is
>     probably impossible).
>
>
> Oh, you really shouldn't use words like "impossible" unless you want 
> someone to figure out

> how to do it. Some people view that as a challenge ;-)


I know, that's why I put it in parenthesis and said "probably" ;-)

-Travis




More information about the NumPy-Discussion mailing list