[Numpy-discussion] indexing bug?

Stefan van der Walt stefan at sun.ac.za
Wed Oct 3 13:35:46 EDT 2007


On Wed, Oct 03, 2007 at 11:12:07AM -0400, Perry Greenfield wrote:
>
> On Sep 28, 2007, at 4:23 PM, Stefan van der Walt wrote:
>
>> On Fri, Sep 28, 2007 at 03:07:30PM -0400, Nadia Dencheva wrote:
>>> This should return an error and not silently truncate to int.
>>
>> Why do you say that?  The current behaviour is consistent and well
>> defined:
>>
>> a[x] == a[int(x)]
>>
> I disagree. It is neither consistent nor well defined.

It works for other objects too:

class MyIndex(object):
    def __int__(self):
        return 1

m = M()

x = N.array([1,2,3]

x[m] == x[1]

> It is not consistent with Python list indexing behavior.

Neither are most other forms of ndarray indexing:

x = [1,2,3]
x[[1,2]]

yields an error.

> It is not consistent with numpy behavior:
>
> >>> x = arange(10)
> >>> x[array(2.99)]
>
> raises an exception

That seems to be an exception to the rule.  I agree that both

x[2.99] and x[array(2.99)]

should behave the same way.

>> We certainly can't change it now (just imagine all the code out there
>> that will break); but I personally don't think it is a big problem.
>>
> I disagree. If people are willing to change the Class API of numpy to be 
> consistent with Python, they certainly should be willing to change this. 
> This behavior is new with numpy, so there should not be a lot of code that 
> depends on it (and shame on those that do :-).

Let me rephrase: we cannot change the API until 1.1, unless this is
seen as a bug.  To which other API changes are you referring?  The
style changes is a different matter entirely.

My point was that the current behaviour is easy to predict, but I am
not especially partial on the matter.

Regards
Stéfan



More information about the NumPy-Discussion mailing list