[Numpy-discussion] bug or feature?
Perry Greenfield
perry at stsci.edu
Mon Jul 11 12:24:24 EDT 2005
On Jul 11, 2005, at 2:38 PM, Curzio Basso wrote:
>> An array used as an index produces a new copy (if you think about it,
>> given the possibilities, there isn't much else that can be done). So
>> the entity on the left of your expression is modified, but since
>> nothing refers to it, it is discarded immediately thereafter. The
>> array
>> 'a' itself was never changed. I'd say that it isn't either a bug or
>> feature.
>
> ok. on the other hand:
>
>>>> a[[0,2],0] = 1
>>>> print a
> array([[ 1, 1, 2, 3],
> [ 4, 5, 6, 7],
> [ 1, 9, 10, 11]])
>
> I have some problem understanding the difference at the implementation
> level between the two cases. I would have assumed that at end they
> would operate on a similar way...
>
> curzio
I was sloppy in my description. For array indexing, assignment does
modify the original array (as your case above illustrates), but once
you sliced the array-indexed array, it changed the context of the
indexing. I.e., (to take a simpler, 1-d array x)
x[[0,2]] = 1 # modifies x
This form results in __setitem__ being called on x
x[[0,2]][:4] = 1 # doesn't modify x
This form results in __getitem__ being called on x (and thus producing
a new copy of the array) for the array indexing and __setitem__ being
called for the slice. At least that's what I think is happening. Todd
or someone more recently familiar with how Python handles this can
correct me if I'm wrong.
Perry
More information about the NumPy-Discussion
mailing list