矩阵运算 (Matrix Operations)
1. 定义
矩阵运算是对二维数组(矩阵)做的一系列数学操作:加减、数乘、矩阵乘法、转置、求逆、行列式等。在 Python 里主要用 NumPy 实现,深度学习 / 机器学习 / 图形学的底层几乎全是矩阵运算。
关键区分:矩阵运算里最容易混的是 逐元素乘法(对应位置相乘) 和 矩阵乘法(行乘列求和)——它们是完全不同的两件事,见第 4 节。
2. 基本概念
| 概念 | 说明 |
|---|---|
| 标量 (scalar) | 单个数,如 5 |
| 向量 (vector) | 一维数组,如 [1,2,3],形状 (3,) |
| 矩阵 (matrix) | 二维数组,形状 (行, 列) = (m, n) |
| 形状 (shape) | (m, n) 表示 m 行 n 列 |
| 转置 (transpose) | 行列互换,(m,n) → (n,m) |
| 单位矩阵 (identity) | 对角线为 1、其余为 0,乘任何矩阵不变 |
3. 逐元素运算(element-wise)
形状相同的矩阵,对应位置直接运算:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
A + B # 逐元素加 [[6,8],[10,12]]
A - B # 逐元素减
A * B # 逐元素乘(Hadamard 积,不是矩阵乘!)[[5,12],[21,32]]
A / B # 逐元素除
A ** 2 # 逐元素平方
A * 3 # 数乘(每个元素乘 3)⚠️
A * B是逐元素乘,不是数学意义的矩阵乘法。矩阵乘要用@或np.dot(见下)。
4. 矩阵乘法(最重要,也最易错)
数学上的矩阵乘法:(m,k) @ (k,n) = (m,n),左边的列数必须等于右边的行数。
A = np.array([[1, 2], [3, 4]]) # (2, 2)
B = np.array([[5, 6], [7, 8]]) # (2, 2)
A @ B # 矩阵乘法(推荐写法)[[19,22],[43,50]]
np.dot(A, B) # 等价
np.matmul(A, B) # 等价形状规则示例:
X = np.random.randn(3, 4) # (3, 4)
W = np.random.randn(4, 2) # (4, 2)
Y = X @ W # (3, 2) —— 中间的 4 抵消
# X @ W 合法(4==4);W @ X 报错(2 != 3)记忆法:
(m, **k**) @ (**k**, n)—— 相邻的两个 k 必须相等、会被”消掉”,剩下(m, n)。这是神经网络前向传播的核心(输入 @ 权重)。
5. 转置、求逆、行列式等
A.T # 转置(行列互换)
np.transpose(A) # 等价
np.linalg.inv(A) # 求逆矩阵(要求方阵且可逆)
np.linalg.det(A) # 行列式
np.trace(A) # 迹(对角线元素之和)
np.eye(3) # 3x3 单位矩阵
np.linalg.solve(A, b) # 解线性方程组 Ax = b(比先求逆再乘更稳更快)
np.linalg.eig(A) # 特征值和特征向量
U, S, Vt = np.linalg.svd(A) # 奇异值分解 (SVD)解方程
Ax=b用np.linalg.solve(A, b),别用inv(A) @ b——后者数值上更不稳、更慢。
6. 常用聚合与轴 (axis)
A.sum() # 所有元素求和
A.sum(axis=0) # 沿行方向压缩 → 每列的和(结果长度=列数)
A.sum(axis=1) # 沿列方向压缩 → 每行的和(结果长度=行数)
A.mean(axis=0) # 每列均值
A.max(axis=1) # 每行最大值
axis=0是”跨行”(纵向,结果按列);axis=1是”跨列”(横向,结果按行)。这是新手最常搞反的点:axis 指的是”被压缩掉的那个维度”。
7. 常见坑
*当成矩阵乘:A * B是逐元素乘;矩阵乘用@(头号坑)- 形状不匹配:
@要求内维相等;(m,k)@(k,n)才行,报shapes not aligned就是维度对不上 - 一维向量的歧义:
(3,)既不是行向量也不是列向量;需要明确时用reshape(-1,1)(列)或reshape(1,-1)(行) inv求不可逆矩阵:奇异矩阵没有逆,会报错;实际中优先用solve/ 伪逆pinvaxis用反:axis=0vsaxis=1记混,结果维度就错了- 整数矩阵除法:整型数组做除法可能被截断,需要时先转
float
8. 延伸阅读 / 关联概念
- NumPy 基础 — 矩阵运算的载体;见
numpy-basics.md - 广播机制 (Broadcasting) — 形状不同的数组如何自动对齐运算;见
broadcasting.md - PyTorch — 张量运算 API 和 NumPy 高度一致,
@同样是矩阵乘;见torch.md - 线性代数 / 矩阵秩 — 矩阵运算的数学基础(特征值、SVD、秩);秩单独成篇见
../linear-algebra/matrix-rank.md - 官方文档:https://numpy.org/doc/stable/reference/routines.linalg.html