矩阵的类型 特殊的矩阵结构能带来计算上的捷径和数学上的保证。本文件讲解单位阵、对角阵、对称阵、三角阵、正交阵、正定阵、稀疏阵与随机矩阵——它们出现在协方差估计、图算法、正则化与马尔可夫链之中。 矩阵并不都是一样的。不同的结构赋予矩阵特殊的性质,使它们计算更快、更容易分析,或者两者兼有。下面是你最常遇到的几种。 方阵(square matrix)的行数和列数相同($n \times n$)。很多有趣的性质(行列式、特征值、逆)只对方阵才有意义。 单位矩阵(identity matrix) $I$ 是对角线上全为 1、其余位置全为 0 的方阵。它是「什么都不做」的变换:对任意兼容的矩阵 $A$ 都有 $AI = IA = A$。 零矩阵(zero matrix) $O$ 的所有元素都是零。
特殊的矩阵结构能带来计算上的捷径和数学上的保证。本文件讲解单位阵、对角阵、对称阵、三角阵、正交阵、正定阵、稀疏阵与随机矩阵——它们出现在协方差估计、图算法、正则化与马尔可夫链之中。
矩阵并不都是一样的。不同的结构赋予矩阵特殊的性质,使它们计算更快、更容易分析,或者两者兼有。下面是你最常遇到的几种。
**方阵(square matrix)**的行数和列数相同(n \times n)。很多有趣的性质(行列式、特征值、逆)只对方阵才有意义。
单位矩阵(identity matrix) I 是对角线上全为 1、其余位置全为 0 的方阵。它是「什么都不做」的变换:对任意兼容的矩阵 A 都有 AI = IA = A。
I = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}
零矩阵(zero matrix) O 的所有元素都是零。它把每个向量都映射为零向量,把信息全部销毁。
**对角矩阵(diagonal matrix)**除主对角线外全是零。用它乘一个向量,就是独立地缩放每一个分量,效率极高。
D = \begin{bmatrix} 3 & 0 \\ 0 & 7 \end{bmatrix}
S = \begin{bmatrix} 3 & -1 \\ -1 & 6 \end{bmatrix}
L = \begin{bmatrix} 2 & 0 & 0 \\ 1 & 3 & 0 \\ -1 & 2 & 4 \end{bmatrix} \qquad U = \begin{bmatrix} 5 & -1 & 2 \\ 0 & 1 & 3 \\ 0 & 0 & -2 \end{bmatrix}
三角矩阵的行列式就等于它对角线元素的乘积。
**正交矩阵(orthogonal matrix)**满足它的转置等于它的逆:Q^TQ = QQ^T = I。
这意味着你只要做一次转置就能「撤销」这个变换,计算上非常便宜。它的列是标准正交的(长度为 1 且两两垂直)。
**稀疏矩阵(sparse matrix)的大部分元素为零,而稠密矩阵(dense matrix)**的大部分元素非零。
在实际中,很多真实世界的矩阵都极度稀疏。
一个百万用户的社会网络可以表示成一个 10^6 \times 10^6 的矩阵,但每个人只和少数几个人有连接,所以几乎所有的项都是零。
**置换矩阵(permutation matrix)**是通过重排单位矩阵的行得到的。用它去乘就是打乱一个向量的元素顺序。它的每一行、每一列都恰好有一个 1,其余全是 0。
例如,下面这个矩阵把第 3 个元素移到位置 1、把第 1 个元素移到位置 2、把第 2 个元素移到位置 3:
P = \begin{bmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}
T = \begin{bmatrix} a & b & c \\ d & a & b \\ e & d & a \end{bmatrix}
这种结构出现在信号处理和卷积中,因为把一个固定滤波器沿信号滑动,等价于乘以一个 Toeplitz 矩阵。
**循环矩阵(circulant matrix)**是一种特殊的 Toeplitz 矩阵,它的每一行都是上一行的循环移位。当一行移到末尾时,会绕回到开头:
C = \begin{bmatrix} 1 & 3 & 2 \\ 2 & 1 & 3 \\ 3 & 2 & 1 \end{bmatrix}
循环矩阵与离散傅里叶变换(DFT)紧密相关,也是循环卷积如何工作的核心。
**Hermitian 矩阵(Hermitian matrix)**是对称矩阵在复数域的对应物:A = A^\ast(其中 A^\ast 是共轭转置)。
对于实值矩阵,Hermitian 和对称是一回事。你会在量子计算和信号处理中遇到它们。
**酉矩阵(unitary matrix)**是正交矩阵在复数域的对应物:U^\ast U = UU^\ast = I。正像正交矩阵在实空间里保持长度不变一样,酉矩阵在复空间里保持长度不变。
幂等矩阵(idempotent matrix)满足 A^2 = A。对它施加两次变换和施加一次相同,所以它是一个投影(projection)。一旦投影过了,再投影一次什么都不会改变。
**幂零矩阵(nilpotent matrix)**满足对某个幂次 k 有 A^k = O(零矩阵)。把变换施加足够多次,一切都会坍缩为零。例如:
\begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}^2 = \begin{bmatrix} 0 & 0 \\ 0 & 0 \end{bmatrix}
B = \begin{bmatrix} 0 & 1 & 1 \\ 1 & 0 & 0 \\ 1 & 0 & 0 \end{bmatrix}
这里,节点 1 与节点 2 和 3 相连,但节点 2 和 3 之间互不相连。
**Vandermonde 矩阵(Vandermonde matrix)**由一组值的连续幂次构成。给定值 x_1, x_2, x_3:
V = \begin{bmatrix} 1 & x_1 & x_1^2 \\ 1 & x_2 & x_2^2 \\ 1 & x_3 & x_3^2 \end{bmatrix}
这种结构出现在多项式插值中:找出唯一一条经过给定一组点的多项式。
Hessenberg 矩阵(Hessenberg matrix)「几乎」是三角阵,在第一条次对角线以下全为零:
H = \begin{bmatrix} 4 & 2 & 1 \\ 3 & 5 & -1 \\ 0 & 1 & 6 \end{bmatrix}
import jax.numpy as jnp theta = jnp.pi / 4 Q = jnp.array([[jnp.cos(theta), -jnp.sin(theta)], [jnp.sin(theta), jnp.cos(theta)]]) print(f"Q @ Q.T:\n{Q @ Q.T}") print(f"Determinant: {jnp.linalg.det(Q):.2f}")
import jax.numpy as jnp S = jnp.array([[4.0, 2.0], [2.0, 3.0]]) print(f"Symmetric: {jnp.allclose(S, S.T)}") eigenvalues, eigenvectors = jnp.linalg.eigh(S) print(f"Eigenvalues: {eigenvalues}") print(f"Dot product of eigenvectors: {jnp.dot(eigenvectors[:, 0], eigenvectors[:, 1]):.6f}")