来源
- 课程:宋浩老师《线性代数》教学视频 2.0 版
- 分集:第 10 个分集,2.1 矩阵的概念
- 视频:BV1h7pteyEww,P10
- 原始材料:截图目录
- 课堂例题:例题.md
1. 矩阵是什么
把 个数 按照 行、 列排成的数表称为一个 矩阵:
- 是行数, 是列数, 称为矩阵的形状(shape)。
- 是矩阵的元素,表示第 行、第 列的数。
- 数学中下标从 开始;Python、NumPy 和 PyTorch 的数组下标从 开始。
例如
是一个 矩阵,其中 。
矩阵与行列式不要混淆
| 对比项 | 矩阵 | 行列式 | |---|---|---| | 书写 | 圆括号或方括号 | 两条竖线 | | 形状 | 可以是任意 | 必须是方阵对应的形式 | | 本质 | 一个有行列结构的数表 | 按规则计算后得到的一个数 | | 行列数 | 可以不相等 | 行数必须等于列数 |
2. 同型矩阵与矩阵相等
同型矩阵
矩阵 与 的行数相等、列数也相等,就称 与 是同型矩阵。
同型只比较形状,不要求对应元素相等。例如两个不同的 矩阵仍然同型。
矩阵相等
因此,矩阵相等是“形状相同”与“对应元素全部相等”两个条件同时成立。
3. 常见的特殊矩阵
3.1 方阵
行数和列数相等的矩阵称为方阵。 方阵简称 阶方阵。
- 主对角线:从左上角到右下角,即 。
- 次对角线:从右上角到左下角。
- 阶方阵就是一个数:。
3.2 行矩阵与列矩阵
- 只有一行的矩阵称为行矩阵,也称行向量,形状为 。
- 只有一列的矩阵称为列矩阵,也称列向量,形状为 。
行向量 与列向量 的元素虽然相同,但形状不同,因此不是同型矩阵,更不相等。
3.3 零矩阵
所有元素都为 的矩阵称为零矩阵,记作 。零矩阵可以是任意形状;需要强调形状时写作 。
两个不同形状的零矩阵并不相等。仅写 时,要根据上下文判断它的形状。
3.4 负矩阵
把矩阵 的每个元素都取相反数,所得矩阵称为 的负矩阵:
与 一定同型。
3.5 上三角矩阵与下三角矩阵
对方阵 :
- 上三角矩阵:主对角线下方的元素全为 ,即 时 。
- 下三角矩阵:主对角线上方的元素全为 ,即 时 。
主对角线上的元素没有必须非零的要求。
3.6 对角矩阵
主对角线上方、下方的元素全为 的方阵称为对角矩阵:
每个对角矩阵既是上三角矩阵,也是下三角矩阵。
3.7 数量矩阵
主对角线元素都是同一个常数 的对角矩阵称为数量矩阵:
3.8 单位矩阵
主对角线元素全为 、其他元素全为 的方阵称为单位矩阵:
课程中也使用 表示单位矩阵。 是 时的数量矩阵。
全部元素都是 的矩阵不是单位矩阵;单位矩阵只有主对角线上是 。
4. 特殊矩阵之间的关系
零方阵既是上三角矩阵、下三角矩阵和对角矩阵,也是 的数量矩阵;非方形零矩阵则不属于这些方阵类别。
5. NumPy / PyTorch 对照
NumPy
import numpy as np
A = np.array([
[3, 0, 5, 4],
[1, 1, 1, 1],
])
print(A.shape) # (2, 4)
print(A[0, 2]) # 5;对应数学记号 a_13
O = np.zeros((2, 4), dtype=int)
D = np.diag([1, 2, 3])
I = np.eye(3, dtype=int)
U = np.triu(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
L = np.tril(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
B = A.copy()
print(np.array_equal(A, B)) # True:整体判断两个矩阵是否相等
print(-A) # 负矩阵
经验:
- 现代 NumPy 代码通常使用
np.ndarray,不建议使用旧的np.matrix类型。 A.shape是后续所有矩阵运算中最先检查的信息。A == B返回逐元素布尔数组;判断整个矩阵是否完全相等使用np.array_equal(A, B)。- 浮点计算存在舍入误差时,通常使用
np.allclose(A, B),而不是要求逐位完全相等。 np.ones((3, 3))是全 矩阵,不是单位矩阵;单位矩阵使用np.eye(3)。
PyTorch
import torch
X = torch.tensor([[3, 0, 5, 4], [1, 1, 1, 1]])
O = torch.zeros(2, 4)
I = torch.eye(3)
mask = torch.tril(torch.ones(4, 4))
print(X.shape) # torch.Size([2, 4])
PyTorch 的矩阵概念与 NumPy 一致,但张量还可以有三维、四维甚至更多维。二维张量就是本节所说的矩阵。
6. 与大模型的联系
- 数据批次常写成 矩阵: 是样本数, 是特征数。
- 一段文本的 token 表示常是 矩阵: 是序列长度, 是隐藏维度。
- Transformer 的注意力分数常形成 方阵。
- 因果注意力用三角形遮罩阻止当前位置看到未来 token,代码中常见
torch.tril(...)。 - 关系矩阵可以表示图中节点之间的连接,也就是图的邻接矩阵。
这些应用首先都依赖同一件事:清楚每个矩阵的 shape,以及每一行、每一列分别代表什么。
本节自检
- 能否只看 shape 判断两个矩阵是否同型?
- 矩阵相等为什么比同型多一个条件?
- 中的 分别表示什么?
- 为什么行向量与含有相同元素的列向量不相等?
- 对角矩阵、数量矩阵、单位矩阵之间是什么包含关系?
np.ones((3, 3))与np.eye(3)有什么不同?











