Numpy和Tensor的高维切片操作

在目标检测中经常看到诸如[::2,...], [1:,:,::2] 等等之类的操作,之前一直只知道对列表的切片操作,在这里模模糊糊了许久也没有仔细研究,这里就做个学习记录.

Numpy中多维数组的切片操作和 python中List 的切片操作一样,都是由start, end, step 三部分组成.

x= np.arange(10)
s1 = x[:3]
s1
Out[22]: array([0, 1, 2])

s2 = x[1:8:2]
s2
Out[25]: array([1, 3, 5, 7])

那其实比较迷惑的就是高维数组了,常见到的就是三维数组和四维数组. 对于多维数组,本的原则是将不同维度上的切片操作用逗号分开就好了.此外对于三维及以上的数组还可以使用... 来代替默认操作.

import numpy as np
demo = np.arange(24).reshape(3,2,4)
demo
Out[12]: 
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]]])
# 从最外面切
r1 = demo[::2,...]  # 等价于 r1 = demo[::2, :, :]
r1
Out[14]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],
       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])
# 从第二层切
r2 = demo[:,::2,:]
r2
Out[16]: 
array([[[ 0,  1,  2,  3]],
       [[ 8,  9, 10, 11]],
       [[16, 17, 18, 19]]])     
# 从最里面那一层切
r3 = demo[...,::2]
r3
Out[18]: 
array([[[ 0,  2],
        [ 4,  6]],
       [[ 8, 10],
        [12, 14]],
       [[16, 18],
        [20, 22]]])   

然后pytorch中tensor的切片操作和Numpy是一样的,这里就不重复了.


版权声明:本文为fr555wlj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。