四维张量 sum(dim) 计算原理
示例张量 t4,shape = (2, 2, 2, 3) → 2个组 × 2个块 × 2行 × 3列
📦 原始张量结构
第 0 组 (dim=0 索引0)
第 0 块 (dim=1 索引0)
| 1 | 2 | 3 |
| 4 | 1 | 2 |
第 1 块 (dim=1 索引1)
| 2 | 1 | 0 |
| 1 | 3 | 2 |
第 1 组 (dim=0 索引1)
第 0 块 (dim=1 索引0)
| 3 | 2 | 1 |
| 0 | 2 | 4 |
第 1 块 (dim=1 索引1)
| 1 | 4 | 2 |
| 2 | 1 | 3 |
dim=0:组维度 | dim=1:块维度 | dim=2:行维度 | dim=3:列维度
1. sum(dim=0):沿「组维度」求和
同一个块、同行、同列,对不同组相加
第0组 第0块
| 1 | 2 | 3 |
| 4 | 1 | 2 |
+
第1组 第0块
| 3 | 2 | 1 |
| 0 | 2 | 4 |
=
结果里的第0块
| 4 | 4 | 4 |
| 4 | 3 | 6 |
结果第 0 块
| 4 | 4 | 4 |
| 4 | 3 | 6 |
结果第 1 块
| 3 | 5 | 2 |
| 3 | 4 | 5 |
1 + 3 = 4
不同组里「同位置」的元素对应相加
✅ 结果 shape:(2, 2, 3)(消除 dim=0,剩下块、行、列)
2. sum(dim=1):沿「块维度」求和
每个组内部,把第0块和第1块按位置相加
第0组 第0块
| 1 | 2 | 3 |
| 4 | 1 | 2 |
+
第0组 第1块
| 2 | 1 | 0 |
| 1 | 3 | 2 |
=
第0组结果
| 3 | 3 | 3 |
| 5 | 4 | 4 |
第 0 组结果
| 3 | 3 | 3 |
| 5 | 4 | 4 |
第 1 组结果
| 4 | 6 | 3 |
| 2 | 3 | 7 |
1 + 2 = 3
同一组内,不同块的同位置元素相加
✅ 结果 shape:(2, 2, 3)(消除 dim=1,剩下组、行、列)
3. sum(dim=2):沿「行维度」求和
每个组、每个块内部,把上下两行按列相加
第0组 第0块
| 1 | 2 | 3 |
| 4 | 1 | 2 |
↓
压成 1 行 3 列
| 5 | 3 | 5 |
第 0 组结果
块 0
| 5 | 3 | 5 |
块 1
| 3 | 4 | 2 |
第 1 组结果
块 0
| 3 | 4 | 5 |
块 1
| 3 | 5 | 5 |
1 + 4 = 5
同一列里,上下两行纵向相加
✅ 结果 shape:(2, 2, 3)(消除 dim=2,剩下组、块、列)
4. sum(dim=3) / sum(dim=-1):沿「列维度」求和
每一行内部,把 3 列横向相加;`dim=-1` 就是最后一维
第0组 第0块
| 1 | 2 | 3 |
| 4 | 1 | 2 |
→
压成 2 行 1 列
| 6 |
| 7 |
第 0 组结果
块 0
| 6 |
| 7 |
块 1
| 3 |
| 6 |
第 1 组结果
块 0
| 6 |
| 6 |
块 1
| 7 |
| 6 |
1 + 2 + 3 = 6
每一行把所有列直接加起来
✅ 结果 shape:(2, 2, 2)(消除 dim=3,剩下组、块、行)
💡 核心规律总结
1. dim 指哪一维,就沿哪一维求和,求和后这一维会被消掉,其他维度顺序不变
2. 四维张量可以先想成:组里面套块,块里面还是二维矩阵,这样看 `dim` 最直观
3. 负索引从后往前数:
4. 对于 shape=(2,2,2,3):
2. 四维张量可以先想成:组里面套块,块里面还是二维矩阵,这样看 `dim` 最直观
3. 负索引从后往前数:
dim=-1 = dim=3,dim=-2 = dim=24. 对于 shape=(2,2,2,3):
sum(dim=0)→shape=(2,2,3)sum(dim=1)→shape=(2,2,3)sum(dim=2)→shape=(2,2,3)sum(dim=3)/sum(dim=-1)→shape=(2,2,2)sum()不指定 dim → 所有元素一起相加,结果是一个标量