先记住一句话(万能口诀)
shape = (axis=0, axis=1)
- axis=0 = 行方向 = 从上到下 = 上下压扁
- axis=1 = 列方向 = 从左到右 = 左右压扁
- 对哪个轴操作,就沿着这个轴 "压缩 / 合并",最后这个轴就消失了
一、二维矩阵(最常用):行 & 列
以你之前的矩阵 A(2行, 3列) 为例:
plaintext
A = [
[1, 2, 3], # 第0行
[4, 5, 6] # 第1行
]
shape = (2, 3) → (axis0=2行, axis1=3列)
1. axis=0(上下压扁 → 按行求和)
- 操作方向:从上往下,把多行压成 1 行
- 动作:每一列的数字,上下相加
- 结果:行消失,只剩列
plaintext
sum(axis=0) = [1+4, 2+5, 3+6] = [5,7,9]
shape 从 (2,3) → (3)
✅ 你的理解完全对:axis=0 就是把 "行" 给抹去,上下压扁
2. axis=1(左右压扁 → 按列求和)
- 操作方向:从左往右,把多列压成 1 列
- 动作:每一行的数字,左右相加
- 结果:列消失,只剩行
plaintext
sum(axis=1) = [1+2+3, 4+5+6] = [6, 15]
shape 从 (2,3) → (2)
✅ 你的理解完全对:axis=1 就是把 "列" 给抹去,左右压扁
二、为什么 keepdims=True 很重要?(解决你之前的报错)
默认 sum 后,被压缩的轴会直接删掉:
A.sum(axis=1)→ shape (2,) (一维,没列了)- 没法和原矩阵 (2,3) 做除法 → 广播报错
加 keepdims=True:
- 压扁,但不删掉轴,保留一个维度占位
A.sum(axis=1, keepdims=True)→ shape (2, 1)- 还是二维矩阵,就能和 (2,3) 正常广播计算
三、延伸到三维张量(你题目里的 (2,3,4))
三维 shape = **(axis0, axis1, axis2)**对应理解:
- axis=0:前后 / 深度压扁(最外层维度)
- axis=1:上下 / 行压扁
- axis=2:左右 / 列压扁
求和后对应形状:
- X(2,3,4).sum(axis=0) → (3,4)
- X(2,3,4).sum(axis=1) → (2,4)
- X(2,3,4).sum(axis=2) → (2,3)
逻辑和二维完全一样:对哪个轴操作,就沿着它合并,这个轴消失
四、终极极简总结
-
axis=0 方向:从上到下效果:上下压扁,行消失
-
axis=1 方向:从左到右效果:左右压扁,列消失
-
通用规则对哪个 axis 操作,就沿着这个轴 "捏扁",最后这个轴就没了
这个理解方式在深度学习里100% 通用:softmax、归一化、求和、均值、拼接全是这个逻辑。