python - Numpy array documentation slicing rule -


in basic slicing of numpy array http://docs.scipy.org/doc/numpy-1.5.x/reference/arrays.indexing.html#basic-slicing,
found following rule not work example shown below.

rule: assume n number of elements in dimension being sliced. then, if not given defaults 0 k > 0 , n k < 0 . if j not given defaults n k > 0 , -1 k < 0 . if k not given defaults 1. note :: same : , means select indices along axis.

what understood : can prioritized top down :

a)if k not given defaults 1.
b)if j not given defaults n k > 0 , -1 k < 0 .
c)if not given defaults 0 k > 0 , n k < 0.

now let's see example. doing take 3d array , print bottom . layer largest index comes first , smaller one. please @ code better understanding.

import numpy np  b= np.arange(24).reshape(2,3,4) print "here input :"  print b print  print "here desired output :" print b[::-1 , :: ,::] print   print "here want desired output different way using above rule :" print b[2:-1:-1 , :: , ::] 

output :

here input : [[[ 0  1  2  3]   [ 4  5  6  7]   [ 8  9 10 11]]   [[12 13 14 15]   [16 17 18 19]   [20 21 22 23]]]  here desired output : [[[12 13 14 15]   [16 17 18 19]   [20 21 22 23]]   [[ 0  1  2  3]   [ 4  5  6  7]   [ 8  9 10 11]]]  here want desired output different way using above rule : [] 

is b[::-1 , :: ,::] not same b[2:-1:-1 , :: , ::] above rule?

the document right, doesn't means can use calculated start, end index in slice object again. tells logic calculate start & end index. use calculated index, need generate index range():

here example:

import numpy np s = slice(none, none, -1) t = np.array([1, 2, 3, 4]) s.indices(len(t)) 

outputs:

(3, -1, -1) 

so (start, stop, stride) of [::-1] 4 element array (3, -1, -1), t[3:-1:-1] empty. (start, stop, stride) range(), so, can use t[range(3,-1,-1)] [4, 3, 2, 1].


Comments