python中的切片操作
python中的切片操作
切片就是按指定范围和步长,从列表、字符串或张量中取出一部分元素。
基本写法是:
对象[start:stop:step]
start:开始位置,包含。stop:结束位置,不包含。step:步长,默认是1。
索引从 0 开始:
a = [10, 20, 30, 40, 50, 60]
# 0 1 2 3 4 5
常见切片:
a[1:4] # [20, 30, 40],取下标 1、2、3
a[:3] # [10, 20, 30],从开头取到下标 3 之前
a[3:] # [40, 50, 60],从下标 3 取到末尾
a[:] # [10, 20, 30, 40, 50, 60],取全部
设置步长,可以隔着取:
a[::2] # [10, 30, 50],取下标 0、2、4
a[1::2] # [20, 40, 60],取下标 1、3、5
负数索引从末尾数,-1 是最后一个元素;负数步长表示倒着取:
a[-3:] # [40, 50, 60],最后三个元素
a[::-1] # [60, 50, 40, 30, 20, 10],反转顺序
对于二维张量,逗号分隔不同维度的索引,可以理解为 x[行, 列]:
x = torch.tensor([
[10, 11, 12, 13],
[20, 21, 22, 23],
[30, 31, 32, 33],
])
x[:2, 1:3]
# tensor([[11, 12],
# [21, 22]])
这里 :2 取前两行,1:3 取下标为 1、2 的列。结合你前面的矩阵配对:
x[:, ::2] # 所有行,取第 0、2 列
x[:, 1::2] # 所有行,取第 1、3 列
还有一个容易混淆的区别:整数索引会去掉对应维度,切片会保留维度。
x[0, :] # 第一行,形状 (4,)
x[0:1, :] # 第一行,形状 (1, 4)

浙公网安备 33010602011771号