[Numpy-discussion] Backwards slicing including the first element
Warren Weckesser
warren.weckesser at enthought.com
Wed Mar 10 10:19:25 EST 2010
Warren Weckesser wrote:
> Jerome Esteve wrote:
>
>> Dear all,
>>
>> Is there a way to give an integer value to j when using a[i:j:-1] so
>> that the first element of the array can be included in the slice ?
>>
>> I would like to use some code like a[i:i-k:-1] to get a slice of
>> length k.
>>
>> The numpy documentation seems to suggest that j=-1 should work:
>>
>> "Assume n is the number of elements in the dimension being sliced.
>> Then, if i is not given it defaults to 0 for k > 0 and n for k < 0 .
>> If j is not given it defaults to n for k > 0 and -1 for k < 0 .
>> If k is not given it defaults to 1."
>>
>> But a[i:i-k:-1] is empty if i-k is -1. The workaround is a[i::-1][:k],
>> is there something simpler ?
>>
>
> You could use a[i:i-(len(a)+k):-1]. This works because a[-len(a)] is
> the same as a[0].
>
>
I'm going to be pedantic and amend that last sentence. While it is true
the a[-len(a)] is the same as a[0], that is not why this works. A
better explanation is that Python is lenient about handling the value
given as the end position in a slice. It does not have to be a valid
index. If the value is out of range, Python will include everything up
to the end of the actual data, and it will not raise an error. So you
can do slices like the following:
-----
In [101]: w
Out[101]: [10, 11, 12, 13, 14]
In [102]: w[2:-5:-1]
Out[102]: [12, 11]
In [103]: w[2:-6:-1]
Out[103]: [12, 11, 10]
In [104]: w[2:-7:-1]
Out[104]: [12, 11, 10]
-----
Note that -6 and -7 are not valid indices; using w[-6] will raise an
IndexError.
Warren
> For example:
>
> -----
> In [57]: a
> Out[57]: array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>
> In [58]: i = 3
>
> In [59]: for k in range(5):
> ....: print k, a[i:i-(len(a)+k):-1]
> ....:
> ....:
> 0 []
> 1 [13]
> 2 [13 12]
> 3 [13 12 11]
> 4 [13 12 11 10]
>
> -----
>
>
> Warren
>
>
>> Many thanks in advance, Jerome.
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at scipy.org
>> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>>
>>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
More information about the NumPy-Discussion
mailing list