關於PYTHON NUMPY陣列的切片的符號省略問題
在看Numpy學習指南時,看陣列切片部分有點暈菜
比如 b = np.arange(24).reshape(2,3,4)
生成了一個三維陣列,
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
然後切片,各種切
b[0]
b[0,0]
b[0,0,0]
這還能明白些,然後加入了冒號“:”,開始冒汗了。
b[:,0,0]
b[0,:,:]
b[0,1,::2]
b[:,1]
b[0,:,-1]
b[0,::-1,-1]
不知道大家看懂沒,反正我是沒看懂。
想了很久之後才算明白。其實把切片形式補全就明白了。
如果我們選整個陣列b,那麼它的切片完整形式應該是
即整個b等價於
b[0:2:1, 0:3:1, 0:4:1]
即【第1維起點:終點:步長, 第2維 ...,第3維】
為了簡化,那麼規定,
1.步長為1可以省略, b[0:2:, 0:3:, 0:4:] (注:當然和步長一起的冒號也可以省略,成如下格式b[0:2, 0:3, 0:4],為了便於理解我們還是先保留這個冒號)
2. 終點為自然終點,可以省略,b[0::, 0::, 0::](注:可以省略成b[0:,0:,0:],不能省略成b[0,0,0])
3. 起點為自然起點,可以省略,b[::,::,::](注:可以省略成b[:,:,:],不能省略成b[,,])
再往下省略就和前面不太一樣了。
比如 b[::,::,::] ,最右邊的,如果都是省略形式,那麼也可以省略,從右邊開始省略,先是冒號省略b[::,::,],然後是逗號省略b[::,::],依次b[::,],b[::],b[:](注:不能省略成b[]),最後就是省略成b了。
如果右邊不是簡略形式,就不能省略,像b[::,::,::2]就不能省略成b[,,::2]
如果想成左邊開始省略的,前面可以加... 即b[..., ::2]