分类
devops

matrix

Matrix(矩阵)是 n-D array(多维数组)在二维(n = 2)情况下的特例。

如果把所有维度的数据结构按层级排列,它们的包含关系如下:

1. 维度层级关系(从低到高)

  • 0-D array:标量(Scalar),也就是单个数字(如 5)。
  • 1-D array:一维数组 / 向量(Vector),只有长度(如 [1, 2, 3])。
  • 2-D array:二维数组 / 矩阵(Matrix),有行和列两个维度(如 3 × 4 的表格)。
  • 3-D 及以上 array:高维数组 / 张量(Tensor)。比如一张彩色图片(高 × 宽 × RGB三通道)就是一个 3-D array,它已经不能叫 Matrix 了。

2. 为什么不能完全把 Matrix 叫成 n-D array?

除了“维度限制(n 必须等于 2)”之外,在科学计算库(如 Python 的 NumPy)中,两者在运算规则上也有本质区别:

  • Matrix(矩阵):严格遵守线性代数规则。例如两个 Matrix 相乘(A * B),执行的是数学上的矩阵乘法(行乘以列),要求前者的列数必须等于后者的行数。
  • n-D array(如 NumPy 的 ndarray):遵循逐元素(Element-wise)广播规则。两个相同形状的 2-D ndarray 相乘(A * B),默认是对应位置的元素直接相乘,甚至支持不同维度之间的自动广播(Broadcasting)。

(注:正因为 2-D ndarray 既能装下矩阵数据,又能灵活兼容更高维度的张量运算,NumPy 官方目前已经逐步废弃了专门的 np.matrix 类,推荐统一使用 2-D 的 ndarray 并配合 @ 符号进行矩阵乘法。)

3. 总结对照表

概念名称 维度限制 (n) 典型代表 核心特点
Matrix(矩阵) 严格等于 2(只有行和列) 数学矩阵、二维网格 具备严格的线性代数意义(转置、求逆、行列式)
n-D array(多维数组) 任意正整数(1D, 2D, 3D…) NumPy ndarray、Java 多维数组 通用的多维数据容器,支持高维切片与逐元素广播运算
Tensor(张量) 任意非负整数(含 0D 标量) PyTorch Tensor、TensorFlow 深度学习中的核心概念,本质上是支持 GPU 加速与自动求导的 n-D array

D 是英文 Dimensional(维度的)或 Dimension(维度)的缩写。

因此,n-D array 的全称就是 N-Dimensional Array,中文翻译为“N 维数组”或“多维数组”。

常见延伸缩写对照

  • 1D (1-Dimensional):一维(只有一条线/长度,如普通列表 [1, 2, 3])。
  • 2D (2-Dimensional):二维(有长和宽/行和列,如表格、平面图像、Matrix 矩阵)。
  • 3D (3-Dimensional):三维(有长、宽、高,如立体模型、彩色图片 高 × 宽 × RGB通道)。
  • nD / ndarray:N 维(任意维度,Python 科学计算库 NumPy 中的核心对象 numpy.ndarray 就是 N-dimensional array 的直接缩写)。

维度判断小技巧

在编程语言(如 Python 或 Java)中,判断一个数组是几维(即 D 前面的数字是多少),只需看定位里面某一个具体元素需要几个索引下标(或者看嵌套了几层中括号 []):
* arr[0] → 需要 1 个下标,就是 1D。
* arr[0][1] → 需要 2 个下标,就是 2D。
* arr[0][1][2] → 需要 3 个下标,就是 3D。

Matrix and Table

在视觉形态上,Matrix(矩阵)和数据库的 Table(数据表)确实都是“由行和列组成的二维网格”,但它们在本质设计、数据类型、顺序敏感性以及运算逻辑上有着根本的区别。

可以这样理解:Matrix 是“纯粹的数学计算网格”,而 Table 是“带业务语义的关系型记录集合”。

1. 五大核心差异拆解

  • 数据类型要求(同构 vs 异构)
    • Matrix(严格同构):矩阵里的每一个格子必须是完全相同的数据类型(通常全都是浮点数 float 或整数 int),这样才能进行整体的矩阵乘法或求逆运算。
    • Table(允许异构):数据表的不同列可以是完全不同的类型。例如第 1 列是整数(员工 ID),第 2 列是字符串(姓名),第 3 列是日期(入职时间),第 4 列是浮点数(薪资)。
  • 行列的语义与对称性
    • Matrix(行列地位平等):矩阵的行和列在数学上是完全对称的,你可以随时对矩阵进行转置(Transpose),把行变成列、列变成行,依然是一个合法的矩阵。
    • Table(行与列语义严格区分):在数据库中,一行(Row/Record)代表一个完整的业务实体(如一个用户),一列(Column/Field)代表实体的某一个属性(如年龄)。你绝不能随随便便把一张用户表“转置”,否则会把“张三”和“25岁”混在同一列里,导致数据类型崩溃。
  • 顺序敏感性(有序位置 vs 无序集合)
    • Matrix(位置决定一切):矩阵中的元素严格依赖 (行号, 列号) 坐标。交换矩阵的第 1 行和第 2 行,就变成了一个完全不同的新矩阵。
    • Table(集合无序性):根据关系型数据库理论,表本质上是一个无序的集合。如果不加 ORDER BY,数据库返回行的顺序是不固定的;交换两行记录在表里的存储位置,完全不改变这张表的业务含义。
  • 列名与索引方式
    • Matrix:通过纯数字下标(如 M[0][1])定位元素,行和列本身没有业务名称。
    • Table:通过字段名(Column Name)和主键(Primary Key)定位数据(如 WHERE user_id = 1001 查 email 列)。
  • 缺失值(Null)的处理
    • Matrix:标准数学矩阵不允许存在“空洞”,每个位置必须有明确的数值(否则需要引入前面聊过的 MaskedArray 来特殊处理)。
    • Table:原生支持 NULL,表示某个实体的某项属性未知或暂未填写。

2. 总结对比表

对比维度 Matrix(数学矩阵) Database Table(数据库表)
数据类型 同构(所有元素必须为同一种数值类型) 异构(每列可独立定义字符串、数字、日期等不同类型)
行列地位 对称,可随时转置(行列互换) 严格不对称(行=实体记录,列=属性字段),不可直接转置
顺序敏感度 高度敏感(交换两行或两列会改变矩阵本身) 无序集合(行顺序不影响数据含义,靠主键与条件查询)
寻址方式 数字坐标索引 (i, j) 字段名 + 主键/过滤条件
核心操作 矩阵乘法、求逆、特征值分解、线性变换 增删改查(CRUD)、关联(JOIN)、分组聚合(GROUP BY)

3. 两者在现代技术中的交汇点:DataFrame

在 Python(Pandas)或大数据(Spark)中,有一个介于 Matrix 和 Table 之间的著名数据结构叫 DataFrame。它既像数据库 Table 一样支持异构列和字段名,又像 Matrix 一样支持高效的向量化数值计算;当把 DataFrame 里的纯数值列提取出来(如 df.values)送入机器学习模型时,它就正式从“数据库表”转化为了“数学矩阵”。