🔍 从三维空间坐标到高维操作,一次搞懂axis的底层逻辑
🧠 1. 维度 = 轴!图解NumPy最烧脑的三大概念
📚 核心参考:图解NumPy:理解数组最形象的教程
1.1 概念三剑客:Dimension/Axis/Rank
在NumPy中,维度(dimension)就是轴(axes)!二者完全等价,就像现实世界用坐标轴描述位置。而秩(rank)就是轴的数量,即维度数量。
💡 关键结论:
维度数 = 轴数量 = 秩
- 轴的本质是数据组织的方向
1.2 现实世界 vs NumPy轴的映射关系
现实空间 |
坐标轴构成 |
定位方式 |
NumPy对应轴 |
一维(直线) |
单x轴 |
(x) |
axis=0 |
二维(平面) |
x轴+y轴 |
(x,y) |
axis=0,1 |
三维(立体) |
x+y+z轴 |
(x,y,z) |
axis=0,1,2 |
四维(时空) |
x+y+z+时间轴 |
(x,y,z,t) |
axis=0,1,2,3 |
🧩 2. 三维数组解剖:用坐标轴思想彻底理解操作
2.1 可视化三维数组结构
下图是典型的 (3,2,4)
三维数组,像搭积木一样分层组织:
用代码构建并观察它的形态:
1 2 3 4 5 6 7 8 9 10 11
| """ numpy 数组维度理解
Version: 1.0 Author: Penry """
import numpy as np
a = np.arange(24).reshape(3,2,4) a
|
运行结果:
2.2 数组特征快速诊断
1 2 3 4 5 6 7 8 9 10 11 12 13
| """ numpy 数组维度理解
Version: 1.1 Author: Penry """
import numpy as np
a = np.arange(24).reshape(3,2,4) print(f'数组a的维度为:{a.ndim}') print(f'数组a的形状为:{a.shape}') print(f'数组a的元素个数为:{a.size}')
|
输出效果:
⚡ 3. 轴操作实战:sum函数中的维度压缩(图解+公式)
3.1 沿axis=0求和(压缩x轴)
1 2 3 4 5 6 7 8 9 10 11
| """ numpy 数组维度理解
Version: 1.2 Author: Penry """
import numpy as np
a = np.arange(24).reshape(3,2,4) print(a.sum(axis=0))
|
效果:
数学本质:
固定y,z坐标,叠加所有x层的值:
Result[y][z]=x=0∑2a[x][y][z]
[a000+a100+a200a010+a110+a210a001+a101+a201a011+a111+a211a002+a102+a202a012+a112+a212a003+a103+a203a013+a113+a213]
✅ 形状变化:(3,2,4) ➔ (2,4) (去掉了x轴)
3.2 沿axis=1求和(压缩y轴)
1 2 3 4 5 6 7 8 9 10 11
| """ numpy 数组维度理解
Version: 1.3 Author: Penry """
import numpy as np
a = np.arange(24).reshape(3,2,4) print(a.sum(axis=1))
|
效果:
数学本质:
固定x,z坐标,叠加所有y行的值:
Result[x][z]=y=0∑1a[x][y][z]
⎣⎢⎡a000+a010a100+a110a200+a210a001+a011a101+a111a201+a211a002+a012a102+a112a202+a212a003+a013a103+a113a203+a213⎦⎥⎤
✅ 形状变化:(3,2,4) ➔ (3,4) (去掉了y轴)
3.3 沿axis=2求和(压缩z轴)
1 2 3 4 5 6 7 8 9 10 11
| """ numpy 数组维度理解
Version: 1.4 Author: Penry """
import numpy as np
a = np.arange(24).reshape(3,2,4) print(a.sum(axis=2))
|
效果:
数学本质:
固定x,y坐标,叠加所有z列的值:
Result[x][y]=z=0∑3a[x][y][z]
⎣⎢⎡a000+a001+a002+a003a100+a101+a102+a103a200+a201+a202+a203a010+a011+a012+a013a110+a111+a112+a113a210+a211+a212+a213⎦⎥⎤
✅ 形状变化:(3,2,4) ➔ (3,2) (去掉了z轴)
💎 4. 终极规律:秒算任意轴操作后的形状
形状变化公式(超实用!)
操作后的形状 = 原始形状移除该轴
操作方式 |
原始shape |
指定axis |
结果shape |
sum(axis=0) |
(3,2,4) |
0 |
(2,4) |
sum(axis=1) |
(3,2,4) |
1 |
(3,4) |
max(axis=2) |
(3,2,4) |
2 |
(3,2) |
mean(axis=1) |
(5,3,6) |
1 |
(5,6) |
✨ 黄金法则:
对axis=n执行操作后,结果数组的shape就是 原始shape去掉第n个维度
🚀 5. 举一反三挑战
❓ 对于四维数组 arr.shape=(2,5,3,4)
:
arr.sum(axis=1).shape = ?
arr.mean(axis=(0,2)).shape = ?
💡 提示:多个轴操作时,同时移除对应维度
🗺️ 5.1 代码验证
创建四维数组并验证形状:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| """ numpy 数组维度理解
Version: 1.5 Author: Penry """
import numpy as np
arr = np.arange(120).reshape(2,5,3,4)
print("原始数组形状:", arr.shape) print("总元素数:", arr.size)
|
输出结果:
这里我们也将数组 arr 展示如下:
arr.sum(axis=1)
操作结果可视化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| """ numpy 数组维度理解
Version: 1.6 Author: Penry """
import numpy as np
arr = np.arange(120).reshape(2,5,3,4)
result = arr.sum(axis=1) print(result)
|
输出结果:
arr.mean(axis=(0,2))
操作结果可视化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| """ numpy 数组维度理解
Version: 1.7 Author: Penry """
import numpy as np
arr = np.arange(120).reshape(2,5,3,4)
result = arr.mean(axis=(0,2)) print(result)
|
输出结果:
🧮 数学原理拆解:
arr.sum(axis=1)
:
Result[x][w][z]=y=0∑4arr[x][y][w][z]
形状变化:(2,5,3,4) ➔ (2,3,4) (去掉了y轴)
其中:
x
遍历轴0 (0-1)
w
遍历轴2 (0-2)
z
遍历轴3 (0-3)
arr.mean(axis=(0,2))
:
Result[y][z]=2∗31x=0∑1w=0∑2arr[x][y][w][z]
形状变化:(2,5,3,4) ➔ (5,4) (去掉了x和w轴)
其中:
y
遍历轴1 (0-4)
z
遍历轴3 (0-3)