【不三不四的脑洞】 NumPy 中数组堆叠(Stacking)操作辨析【Python】

27 阅读2分钟

对于初学者来说,NumPy 的维度变换(尤其是涉及 3D 的时候)通常很抽象,所以我制作了以下两张 3D 可视化图,将 “数据在空间中的排列方式” 呈现了出来,便于大家理解。

以下是详细解析:

图 1:矩阵(2D数组)的堆叠

739e8ed8-c043-41bb-8589-977c074bcf14.png

这张图展示了两个 2x2 的矩阵(蓝色 a 和 粉色 b)在不同维度上的合并效果。

  • 输入数据
    • a (蓝)[[1, 2], [3, 4]]
    • b (粉)[[5, 6], [7, 8]]
  1. hstack (Horizontal Stack - 水平堆叠)

    • 图示:蓝色在左,粉色在右,横向拼接。
    • 含义:在 水平方向(列方向,axis=1) 增加数据。
    • 结果:变成了一个更宽的 2x4 矩阵。
    • 比喻:像是在写一行字,后面接着写下一句。
  2. vstack (Vertical Stack - 垂直堆叠)

    • 图示:蓝色在上,粉色在下,纵向拼接。
    • 含义:在 垂直方向(行方向,axis=0) 增加数据。
    • 结果:变成了一个更高的 4x2 矩阵。
    • 比喻:像是写完一行字,换行继续写。
  3. 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]
  1. row_stack (按行堆叠)

    • 图示:蓝色是一行,粉色是下面一行。
    • 含义:将一维数组作为新矩阵的行放入。
    • 结果:变成了一个 2x3 的矩阵。
    • 注意:对于 1D 数组,它等同于 vstack
  2. 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 = 显式地指定作为行还是列