取一个List的部分元素是非常常见的操作,Python提供了切片(Slice)操作符
L[0:3]表示,从索引0开始取值,直到索引3为止,单不包括索引3。即索引0, 1, 2, 正好是3个元素。
如果第一个索引是0, 还可以省略:
也可以从索引1开始,取出2个元素。如L[1:3],则取的是索引为1,2这个两个位置的值。
只用一个:,表示从头到尾,因此,L[:]实际上复制出了一个新list。
切片操作还可以制定第三个参数:L[::2]
第三个操作表示每N个元素取一个,上面的L[::2]表示每2个元素取一个值,也就是隔一个取一个。
x0 = x[:, 0::2, 0::2, :] 表示在维度1和维度2,从索引0开始,每隔一个元素取一个。
x1 = x[:, 1::2, 1::2, :] 表示在维度1和维度2,从索引1开始,每隔一个元素取一个。
x2 = x[:, 0::2, 1::2, :] 表示在维度1从索引0开始,每隔一个元素取一个;维度2从索引1开始,每隔一个元素取一个。 x3 = x[:, 1::2, 1::2, :] 表示在维度1和维度2从索引1开始,每隔一个元素取一个。
swin Transformer的pathc merging便是这种操作。