[Numpy-discussion] bug or feature?
Todd Miller
jmiller at stsci.edu
Thu Jul 14 02:44:59 CDT 2005
On Mon, 2005-07-11 at 15:22 -0400, Perry Greenfield wrote:
> 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
>
This is indeed what happens. A temporary is created by the first sub-
expression x[[0,2]], modified by the slice subexpression [:4] = 1, and
then discarded. I think the array indexing "grammar" could be changed
to support x[[0,2],:4] as a single expression which would create the
temporary and then copy-back at the end... but numarray's array
indexing is not currently that fancy.
Todd
More information about the Numpy-discussion
mailing list