在看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]