[Numpy-discussion] take semantics (bug?)

Michael McNeil Forbes mforbes at phys.washington.edu
Tue Dec 5 21:57:10 EST 2006


Robert Kern <robert.kern at gmail.com> wrote:
> Michael McNeil Forbes wrote:
> > What are the semantics of the "take" function?
> > 
> > I would have expected that the following have the same shape and size:
> > 
> >>>> a = array([1,2,3])
> >>>> inds = a.nonzero()
> >>>> a[inds]
> > array([1, 2, 3])
> >>>> a.take(inds)
> > array([[1, 2, 3]])
> > 
> > Is there a bug somewhere here or is this intentional?
> 
> It's a result of a.nonzero() returning a tuple.
...
> __getitem__ interprets tuples specially: a[1,2,3] == a[(1,2,3)], also a[0,] 
> == a[0].
> 
> .take() doesn't; it simply tries to convert its argument into an array. It 
> can
> convert (array([0, 1, 2]),) into array([[0, 1, 2]]), so it does.

Okay.  I understand why this happens from the code.

1) Is there a design reason for this inconsistent treatment of "indices"?
2) If so, is there some place (perhaps on the Wiki or in some source 
code I cannot find) that design decisions like this are discussed?  (I 
have several other inconsistencies I would like to address, but would 
like to find out if they are "intentional" before wasting people's time.)

Thanks,
Michael.




More information about the NumPy-Discussion mailing list