在目标检测中经常看到诸如[::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版权协议,转载请附上原文出处链接和本声明。