On Fri, Jun 6, 2008 at 10:46 PM, Anne Archibald <[EMAIL PROTECTED]> wrote: > 2008/6/6 Keith Goodman <[EMAIL PROTECTED]>: >> I'd like to shift the columns of a 2d array one column to the right. >> Is there a way to do that without making a copy? >> >> This doesn't work: >> >>>> import numpy as np >>>> x = np.random.rand(2,3) >>>> x[:,1:] = x[:,:-1] >>>> x >> >> array([[ 0.44789223, 0.44789223, 0.44789223], >> [ 0.80600897, 0.80600897, 0.80600897]]) > > As a workaround you can use backwards slices: >worki > In [40]: x = np.random.rand(2,3) > > In [41]: x[:,:0:-1] = x[:,-2::-1] > > In [42]: x > Out[42]: > array([[ 0.20183084, 0.20183084, 0.08156887], > [ 0.30611585, 0.30611585, 0.79001577]])
Neat. It makes sense to go backwards. Thank you. > Less painful for numpy developers but more painful for users is to > warn them about the status quo: operations on overlapping slices can > happen in arbitrary order. Now I'm confused. Could some corner case of memory layout cause numpy to work from right to left, breaking the workaround? Or can I depend on the workaround working with numpy 1.0.4? _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion