对于初学者来说,NumPy 的维度变换(尤其是涉及 3D 的时候)通常很抽象,所以我制作了以下两张 3D 可视化图,将 “数据在空间中的排列方式” 呈现了出来,便于大家理解。
以下是详细解析:
图 1:矩阵(2D数组)的堆叠
这张图展示了两个 2x2 的矩阵(蓝色 a 和 粉色 b)在不同维度上的合并效果。
- 输入数据:
- a (蓝):
[[1, 2], [3, 4]] - b (粉):
[[5, 6], [7, 8]]
- a (蓝):
-
hstack(Horizontal Stack - 水平堆叠)- 图示:蓝色在左,粉色在右,横向拼接。
- 含义:在 水平方向(列方向,axis=1) 增加数据。
- 结果:变成了一个更宽的 2x4 矩阵。
- 比喻:像是在写一行字,后面接着写下一句。
-
vstack(Vertical Stack - 垂直堆叠)- 图示:蓝色在上,粉色在下,纵向拼接。
- 含义:在 垂直方向(行方向,axis=0) 增加数据。
- 结果:变成了一个更高的 4x2 矩阵。
- 比喻:像是写完一行字,换行继续写。
-
dstack(Depth Stack - 深度堆叠)- 图示:这是最精彩的部分。蓝色在前,粉色在后(Z轴方向)。
- 含义:在 深度方向(第三维度,axis=2) 增加数据。它把两个 2D 平面叠成了一个 3D 立方体。
- 结果:变成了 2x2x2 的三维数组。
(1,5)是一组,(2,6)是一组。 - 比喻:像是把两张纸叠在一起,或者 RGB 图像通道的叠加。
图 2:向量(1D数组)的堆叠
这张图展示了两个 1D 数组(向量)(蓝色 a 和 粉色 b)如何通过特殊函数堆叠成 2D 矩阵。
- 输入数据:
- a (蓝):
[1, 2, 3] - b (粉):
[4, 5, 6]
- a (蓝):
-
row_stack(按行堆叠)- 图示:蓝色是一行,粉色是下面一行。
- 含义:将一维数组作为新矩阵的行放入。
- 结果:变成了一个 2x3 的矩阵。
- 注意:对于 1D 数组,它等同于
vstack。
-
column_stack(按列堆叠)- 图示:蓝色竖起来变成了第一列,粉色竖起来变成了第二列。
- 含义:将一维数组“立起来”,作为 新矩阵的列 放入。
- 结果:变成了一个 3x2 的矩阵。
- 注意:这个函数非常有用,因为如果直接用
hstack处理 1D 数组,只会得到一个更长的 1D 数组[1,2,3,4,5,6],而不会变成 2D 矩阵。column_stack强制增加了维度。
总结
我制作了两张图 —— 用非常干净、符合直觉的 3D 形式(Shader Joy 风格),解决了编程新手最头疼的 Numpy “维度(Axis)” 认知问题:
- H (Horizontal) = 横着拼
- V (Vertical) = 竖着拼
- D (Depth) = 前后叠
- Row/Column = 显式地指定作为行还是列