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-Dndarray相乘(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(严格同构):矩阵里的每一个格子必须是完全相同的数据类型(通常全都是浮点数
- 行列的语义与对称性
- Matrix(行列地位平等):矩阵的行和列在数学上是完全对称的,你可以随时对矩阵进行转置(Transpose),把行变成列、列变成行,依然是一个合法的矩阵。
- Table(行与列语义严格区分):在数据库中,一行(Row/Record)代表一个完整的业务实体(如一个用户),一列(Column/Field)代表实体的某一个属性(如年龄)。你绝不能随随便便把一张用户表“转置”,否则会把“张三”和“25岁”混在同一列里,导致数据类型崩溃。
- 顺序敏感性(有序位置 vs 无序集合)
- Matrix(位置决定一切):矩阵中的元素严格依赖
(行号, 列号)坐标。交换矩阵的第 1 行和第 2 行,就变成了一个完全不同的新矩阵。 - Table(集合无序性):根据关系型数据库理论,表本质上是一个无序的集合。如果不加
ORDER BY,数据库返回行的顺序是不固定的;交换两行记录在表里的存储位置,完全不改变这张表的业务含义。
- Matrix(位置决定一切):矩阵中的元素严格依赖
- 列名与索引方式
- Matrix:通过纯数字下标(如
M[0][1])定位元素,行和列本身没有业务名称。 - Table:通过字段名(Column Name)和主键(Primary Key)定位数据(如
WHERE user_id = 1001查email列)。
- Matrix:通过纯数字下标(如
- 缺失值(Null)的处理
- Matrix:标准数学矩阵不允许存在“空洞”,每个位置必须有明确的数值(否则需要引入前面聊过的
MaskedArray来特殊处理)。 - Table:原生支持
NULL,表示某个实体的某项属性未知或暂未填写。
- Matrix:标准数学矩阵不允许存在“空洞”,每个位置必须有明确的数值(否则需要引入前面聊过的
2. 总结对比表
| 对比维度 | Matrix(数学矩阵) | Database Table(数据库表) |
|---|---|---|
| 数据类型 | 同构(所有元素必须为同一种数值类型) | 异构(每列可独立定义字符串、数字、日期等不同类型) |
| 行列地位 | 对称,可随时转置(行列互换) | 严格不对称(行=实体记录,列=属性字段),不可直接转置 |
| 顺序敏感度 | 高度敏感(交换两行或两列会改变矩阵本身) | 无序集合(行顺序不影响数据含义,靠主键与条件查询) |
| 寻址方式 | 数字坐标索引 (i, j) |
字段名 + 主键/过滤条件 |
| 核心操作 | 矩阵乘法、求逆、特征值分解、线性变换 | 增删改查(CRUD)、关联(JOIN)、分组聚合(GROUP BY) |
3. 两者在现代技术中的交汇点:DataFrame
在 Python(Pandas)或大数据(Spark)中,有一个介于 Matrix 和 Table 之间的著名数据结构叫 DataFrame。它既像数据库 Table 一样支持异构列和字段名,又像 Matrix 一样支持高效的向量化数值计算;当把 DataFrame 里的纯数值列提取出来(如 df.values)送入机器学习模型时,它就正式从“数据库表”转化为了“数学矩阵”。