[Numpy-discussion] Fwd: Advanced selection, duplicate indices, and augmented assignment
Travis Oliphant
oliphant at ee.byu.edu
Mon Jan 8 12:04:22 CST 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