t[-1:, 1:4, 0:3:2]什么意思,张量范围索引 / 切片
·
t[-1:, 1:4, 0:3:2]张量范围索引 / 切片讲得明明白白!
一、先记住 3 条黄金规则(学会就永远不会错)
-
逗号
,= 分隔维度张量几维,就有几个逗号分隔项
-
冒号
:= 取全部 / 从哪到哪start:end→ 从 start 开始,不包含 endstart:→ 从 start 到最后:end→ 从最前到 end:→ 取全部
-
负数 = 倒数
-1= 最后一个-2= 倒数第二个
二、我先造一个和你一样的 3 维张量
import torch
# 形状:(2, 5, 4)
# 维度0:2个矩阵
# 维度1:每个矩阵 5 行
# 维度2:每行 4 列
t = torch.randint(0, 10, (2, 5, 4))
这个张量长这样:
第0个矩阵:
[
[a,b,c,d], 第0行
[e,f,g,h], 第1行
[i,j,k,l], 第2行
[m,n,o,p], 第3行
[q,r,s,t] 第4行
]
第1个矩阵:
[
[1,2,3,4], 第0行
[5,6,7,8], 第1行
[9,10,11,12],第2行
[13,14,15,16],第3行
[17,18,19,20]第4行
]
三、逐行讲解你看不懂的代码
1)print(t[1, 1:])
翻译成人话:
- 第 1 个维度(最外层)取 1 → 拿第 1 个矩阵
- 第 2 个维度取
1:→ 从第 1 行开始,取到最后一行 - 第 3 个维度不写 → 取全部列
结果:
取第 1 个矩阵的 第 1、2、3、4 行,所有列
[
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
[17,18,19,20]
]
2)print(t[-1:, 1:4, 0:3:2])
这是复杂切片,我拆成 3 段讲:
格式:
t[ 维度0 , 维度1 , 维度2 ]
第一段:-1: → 维度 0
-1= 最后一个- 所以
-1:= 取最后 1 个矩阵
第二段:1:4 → 维度 1
- 从 第 1 行 开始
- 到 第 4 行结束(不包含 4)
- 取:第 1、2、3 行
第三段:0:3:2 → 维度 2(最难!)
格式:start : end : step
0→ 从第 0 列开始3→ 到第 3 列结束(不包含)2→ 步长 2,每隔一个取一个
所以取:第 0 列、第 2 列
最终整句翻译(超级重要)
t[-1:, 1:4, 0:3:2]
= 最后一个矩阵
- 第 1、2、3 行
- 第 0、2 列
最终取出的结果长这样
[
[5,7], # 第1行:第0列、第2列
[9,11], # 第2行:第0列、第2列
[13,15] # 第3行:第0列、第2列
]
四、我再给你总结成万能口诀(永远不会忘)
- 逗号 = 切维度
- 冒号 = 取范围
- 负数 = 倒数
- start:end → 左闭右开
- start🔚step → 隔 step 取一个
更多推荐

所有评论(0)