关于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]

扫描二维码关注公众号,回复: 1784353 查看本文章

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]


猜你喜欢

转载自blog.csdn.net/qq_22194315/article/details/80855249