[Numpy-discussion] is it a bug?
Travis E. Oliphant
oliphant@enthought....
Thu Mar 12 22:48:28 CDT 2009
Robert Kern wrote:
> On Thu, Mar 12, 2009 at 01:34, Stéfan van der Walt <stefan@sun.ac.za> wrote:
>
>> 2009/3/12 Robert Kern <robert.kern@gmail.com>:
>>
>>>> idx = np.array([0,1])
>>>> e = x[0,:,idx]
>>>> print e.shape
>>>>
>>>> #-----> return (2,3). I think the right answer should be (3,2). Is
>>>> # it a bug here? my numpy version is 1.2.1.
>>>>
>>> It's certainly weird, but it's working as designed. Fancy indexing via
>>> arrays is a separate subsystem from indexing via slices. Basically,
>>> fancy indexing decides the outermost shape of the result (e.g. the
>>> leftmost items in the shape tuple). If there are any sliced axes, they
>>> are *appended* to the end of that shape tuple.
>>>
>> This was my understanding, but now I see:
>>
>> In [31]: x = np.random.random([4,5,6,7])
>>
>> In [32]: idx = np.array([1,2])
>>
>> In [33]: x[:, idx, idx, :].shape
>> Out[33]: (4, 2, 7)
>>
>
> Hmm. Well, your guess is as good as mine at this point.
>
>
Referencing my previous post on this topic. In this case, it is
unambiguous to replace dimensions 1 and 2 with the result of
broadcasting idx and idx together. Thus the (5,6) dimensions is
replaced by the (2,) result of indexing leaving the outer dimensions
in-tact, thus (4,2,7) is the result.
I could be persuaded that this attempt to differentiate "unambiguous"
from "ambiguous" sub-space replacements was mis-guided and we should
have stuck with the simpler rule expressed above. But, it seemed so
aesthetically pleasing to swap-out the indexed sub-space when it was
possible to do it.
-Travis
More information about the Numpy-discussion
mailing list