[Numpy-discussion] Inplace shift
Keith Goodman
kwgoodman at gmail.com
Sat Jun 7 10:28:39 EDT 2008
On Fri, Jun 6, 2008 at 10:46 PM, Anne Archibald
<peridot.faceted at gmail.com> wrote:
> 2008/6/6 Keith Goodman <kwgoodman at gmail.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]
>>>> 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?
More information about the NumPy-Discussion
mailing list