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)
posted @ 2026-10-17 15:16  凪风sama  阅读(4)  评论(0)    收藏  举报