Russel Howe wrote: > Oh, of course. I can reverse it myself. Thanks, I did not think of that.
note that you may need to make sure that your arrays are in C-order. -Chris > Russel > > Warren Weckesser wrote: >> Russel Howe wrote: >>> Since they are iterators, is it possible to check for the second >>> condition and reverse both of them so the behavior I expect happens or >>> does this break something else? >>> >> You may already know this, but just in case... >> >> In the second case, you can accomplish the shift by using reversed slices: >> >> a[:, -1:0:-1] = a[:, -2::-1] >> >> >> Warren >> >>> Russel >>> Robert Kern wrote: >>> >>>> On Mon, Jan 18, 2010 at 13:41, Russel Howe <[email protected]> wrote: >>>> >>>>> This looks like the difference between memmove and memcpy to me, but I >>>>> am not sure what the expected behavior of numpy should be. The first >>>>> shift behaves the way I expect, the second is surprising. >>>>> >>>> memmove() and memcpy() are not used for these operations (and in >>>> general, they can't be). Rather, iterators are created and looped over >>>> to do the assignments. Because you are not making copies on the >>>> right-hand-side, you are modifying the RHS as the iterators assign to >>>> the LHS. >>>> >>>> >>>>> In [3]: a[:, :-1] = a[:, 1:] >>>>> >>>>> In [4]: a >>>>> Out[4]: >>>>> array([[0, 5, 4, 8, 2, 7, 8, 7, 6, 6], >>>>> [6, 3, 3, 9, 8, 0, 8, 9, 5, 5], >>>>> [0, 1, 1, 2, 5, 8, 2, 5, 3, 3], >>>>> [0, 0, 2, 8, 2, 0, 7, 7, 0, 0], >>>>> [8, 6, 9, 6, 3, 9, 4, 4, 5, 5], >>>>> [7, 6, 9, 3, 8, 9, 9, 6, 9, 9], >>>>> [8, 8, 4, 0, 3, 7, 6, 7, 6, 6], >>>>> [4, 9, 2, 4, 7, 3, 6, 7, 4, 4], >>>>> [2, 0, 7, 0, 7, 6, 6, 1, 6, 6], >>>>> [3, 8, 8, 9, 6, 7, 2, 5, 0, 0]], dtype=uint8) >>>>> >>>> The first one works because the RHS pointer is always one step ahead >>>> of the LHS pointer, thus it always reads pristine data. >>>> >>>> >>>>> In [5]: a[:, 1:] = a[:, :-1] >>>>> >>>>> In [6]: a >>>>> Out[6]: >>>>> array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], >>>>> [6, 6, 6, 6, 6, 6, 6, 6, 6, 6], >>>>> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], >>>>> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], >>>>> [8, 8, 8, 8, 8, 8, 8, 8, 8, 8], >>>>> [7, 7, 7, 7, 7, 7, 7, 7, 7, 7], >>>>> [8, 8, 8, 8, 8, 8, 8, 8, 8, 8], >>>>> [4, 4, 4, 4, 4, 4, 4, 4, 4, 4], >>>>> [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], >>>>> [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]], dtype=uint8) >>>>> >>>> The second one fails to work as you expect because the RHS pointer is >>>> always one step behind the LHS pointer, thus it always reads the data >>>> that just got modified in the previous step. The data you expected it >>>> to read has already been wiped out. >>>> >>>> >>> _______________________________________________ >>> NumPy-Discussion mailing list >>> [email protected] >>> http://mail.scipy.org/mailman/listinfo/numpy-discussion >>> >> _______________________________________________ >> NumPy-Discussion mailing list >> [email protected] >> http://mail.scipy.org/mailman/listinfo/numpy-discussion > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion -- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception [email protected] _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
