[Numpy-discussion] Inplace shift
Sat Jun 7 09:28:39 CDT 2008
On Fri, Jun 6, 2008 at 10:46 PM, Anne Archibald
> 2008/6/6 Keith Goodman <email@example.com>:
>> 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]
>> array([[ 0.44789223, 0.44789223, 0.44789223],
>> [ 0.80600897, 0.80600897, 0.80600897]])
> As a workaround you can use backwards slices:
> In : x = np.random.rand(2,3)
> In : x[:,:0:-1] = x[:,-2::-1]
> In : x
> 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?
More information about the Numpy-discussion