On Thu, Aug 11, 2011 at 8:37 AM, Olivier Delalleau <sh...@keba.be> wrote:
> Maybe confusing, but working as expected. > > > When you write: > matched_to[np.array([0, 1, 2])] = 3 > it calls __setitem__ on matched_to, with arguments (np.array([0, 1, 2]), > 3). So numpy understand you want to write 3 at these indices. > > > When you write: > matched_to[:3][match] = 3 > it first calls __getitem__ with the slice as argument, which returns a view > of your array, then it calls __setitem__ on this view, and it fills your > matched_to array at the same time. > > > But when you write: > matched_to[np.array([0, 1, 2])][match] = 3 > it first calls __getitem__ with the array as argument, which retunrs a > *copy* of your array, so that calling __setitem__ on this copy has no effect > on your original array. > > -=- Olivier > > Right, but I guess my question is does it *have* to be that way? I guess it makes some sense with respect to indexing with a numpy array like I did with the last example, because an element could be referred to multiple times (which explains the common surprise with '+='), but with boolean indexing, we are guaranteed that each element of the view will appear at most once. Therefore, shouldn't boolean indexing always return a view, not a copy? Is the general case of arbitrary array selection inherently impossible to encode in a view versus a slice with a regular spacing? Thanks, Ben Root
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion