
numpy.linalg 实战指南一份实用 numpy.linalg 指南覆盖向量、矩阵乘法、线性系统、分解、特征问题、最小二乘和数值稳定性。理解 NumPy 线性代数背后的几何和形状约定。根据问题选择 solve、lstsq、QR、SVD 或特征值方法。检查残差、秩、条件数和数值容差。编写高效、可解释且可测试的线性代数流程。示例均为独立代码片段可复制到 Python 3 环境中运行。1. 向量、形状、范数与几何含义NumPy 使用 ndarray 表示向量和矩阵。shape 为 (n,) 的一维数组与 shape 为 (n, 1) 的列矩阵并不相同这个区别会影响广播、矩阵乘法和求解器输入。范数衡量大小距离比较向量点积衡量方向一致程度。图 1向量投影表示 v 沿 u 方向的分量。概念NumPy 表达式含义向量形状v.shape(n,) 或明确的 (n, 1)点积np.dot(u, v) 或 u v方向一致性和加权和欧氏范数np.linalg.norm(v)大小 ||v||₂矩阵范数np.linalg.norm(A)取决于指定的范数阶数单位向量v / np.linalg.norm(v)大小为 1 的方向距离np.linalg.norm(u - v)欧氏间隔import numpy as npu np.array([3.0, 1.0])v np.array([1.0, 2.5])print(u.shape, v.shape)print(dot:, u v)print(norm:, np.linalg.norm(u))projection (v u) / (u u) * uprint(projection)形状纪律当表达向量语义时使用 (n)需要列矩阵时明确使用 (n, 1)。使用 前检查维度若 A 是 (m, n)兼容向量应是 (n,) 或 (n, 1)。对一批向量计算范数或归约时显式指定 axis。记录单位和坐标系只有分量可比较时范数才有明确意义。2. 矩阵乘法与线性变换矩阵可以表示线性变换、方程组、类似协方差的对象或系数表。在 NumPy 中* 表示逐元素乘法 表示矩阵乘法。矩阵乘法可以组合变换也可以把加权坐标组合起来。图 2矩阵把单位圆映射为椭圆样的变换曲线。A np.array([[2.0, 0.5], [0.0, 1.5]])B np.array([[1.0, -1.0], [2.0, 0.0]])x np.array([3.0, 4.0])print(A * B) # 逐元素乘法print(A B) # 矩阵乘法print(A x) # 变换向量print(A.T) # 转置操作表达式形状行为逐元素乘法A * B数组按元素广播矩阵乘法A B内部维度必须匹配转置A.T二维矩阵交换轴迹np.trace(A)主对角线之和对角线np.diag(A)提取或构造对角线秩np.linalg.matrix_rank(A)独立方向数量方向与批量计算对于矩阵批次许多函数把前导维度视为批次把最后两个轴作为矩阵维度。应阅读函数的轴约定并用小例子测试。转置视图可能不是连续内存通常没有问题但需要特定内存布局的下游代码可能受影响。3. 求解线性系统与检查残差线性系统 Ax b 要求一个 x 同时满足多条方程。对于方阵且非奇异的系统应使用 np.linalg.solve而不是先计算显式逆矩阵。求解后计算残差 r Ax − b并根据 b 的尺度检查其相对范数。A np.array([[3.0, 1.0], [1.0, 2.0]])b np.array([9.0, 8.0])x np.linalg.solve(A, b)residual A x - brelative_residual np.linalg.norm(residual) / np.linalg.norm(b)print(solution:, x)print(relative residual:, relative_residual)问题推荐方法诊断方阵非奇异 Axbnp.linalg.solve||Ax−b||超定系统np.linalg.lstsq残差和秩奇异或秩亏lstsq 或 pinv秩和奇异值多个右端项solve(A, B)B 有多个列对称正定Cholesky 方法或 solve对称性和正定性为什么不使用 inv(A) b显式求逆通常计算量更大可能放大数值误差也隐藏了实际的线性系统操作。只有在确实需要逆矩阵且理解数值后果时才考虑使用 inv。# 一次求解多个右端项B np.column_stack([b, np.array([1.0, 2.0])])solutions np.linalg.solve(A, B)print(solutions.shape)4. 最小二乘、投影与 QR/SVD 思想当方程数多于未知数时可能不存在精确解。最小二乘选择参数使 ||Ax − b||₂² 最小。从几何上说拟合向量是 b 在 A 的列空间上的投影。NumPy 的 lstsq 返回解、残差信息、秩和奇异值。图 3最小二乘寻找使平方残差最小的直线。x_values np.linspace(0, 10, 30)y_values 2.0 * x_values 1.0 np.random.default_rng(2026).normal(0, 1.5, 30)A np.column_stack([x_values, np.ones_like(x_values)])coefficients, residuals, rank, singular_values np.linalg.lstsq(A, y_values, rcondNone)prediction A coefficientsprint(coefficients)print(residuals, rank, singular_values)结果含义用途solution最佳最小二乘系数预测或参数估计residuals平方残差汇总适用时作为拟合诊断rankA 的数值秩可识别性检查singular values独立方向的尺度条件性和有效秩rcond小奇异值阈值控制秩的解释QR 与 SVD 直觉QR 分解把 A 写成 A QR其中包含正交方向和上三角因子。SVD 把 A 写成 A UΣVᵀ分离输入方向、缩放和输出方向。SVD 特别适合秩亏系统、伪逆、压缩和诊断。列接近线性相关时不要直接把系数解释为稳定结果。5. 特征值、特征向量与对称矩阵特征向量 v 满足 Av λv矩阵 A 作用后向量长度和符号可能变化但方向不变。特征值表示这些缩放因子。对于实对称或 Hermitian 矩阵eigh 会利用结构返回实特征值和正交归一的特征向量。图 4特征向量表示矩阵作用后保持的方向特征值表示缩放程度。A np.array([[3.0, 1.0], [1.0, 2.0]])values, vectors np.linalg.eigh(A)for index, value in enumerate(values):v vectors[:, index]print(value, v)print(np.allclose(A v, value * v))# 一般方阵可能得到复数结果values_general, vectors_general np.linalg.eig(A)函数矩阵假设输出eig一般方阵可能为复数的特征对eigh实对称 / Hermitian实特征值和正交向量eigvals一般方阵只返回特征值eigvalsh对称 / Hermitian只返回特征值且利用结构svd矩形或方阵U、奇异值、Vh特征向量约定特征向量的符号或复数相位不唯一v 与 −v 表示同一实方向。比较不同数值运行时应比较子空间或重构结果而不要强求每个向量符号完全一致。6. SVD、伪逆、范数与矩阵性质奇异值分解 A UΣVᴴ 适用于矩形矩阵是重要的诊断工具。较大的奇异值代表强方向很小的奇异值表示接近线性相关或观测较弱的方向。伪逆使用容差处理小奇异值。图 5奇异值显示主要方向和有效数值秩。A np.array([[1.0, 2.0, 3.0], [2.0, 4.0, 6.0]])U, singular_values, Vh np.linalg.svd(A, full_matricesFalse)rank np.linalg.matrix_rank(A)A_pinv np.linalg.pinv(A)print(U.shape, singular_values, Vh.shape)print(rank)print(np.allclose(A A_pinv A, A))工具问题解释norm(A, 2)最大的奇异值是多少最大放大程度norm(A, fro)总体元素大小是多少平方和开根matrix_rank有多少独立方向依赖容差的数值秩pinv最小范数广义逆是什么使用奇异值截断cond矩阵有多敏感最大与最小相关尺度之比伪逆注意事项伪逆很有用但很小的奇异值会使系数对噪声非常敏感。当解的稳定性重要时应同时报告秩和奇异值。7. 条件性、数值稳定性与生产检查表良态问题在输入发生小扰动时只会产生适度变化病态问题会放大测量误差或舍入误差。条件性是数学问题的性质稳定性还取决于算法。缩放变量、选择利用结构的求解器和检查残差可以提高可靠性但不能让本质上含糊的问题变得有信息。图 6条件性直觉应相对于尺度和敏感性解释小扰动。检查项问题行动形状矩阵和向量维度是否有意设计打印 shape 并断言约定秩行列是否足够独立检查 matrix_rank 和奇异值条件数输入噪声会被放大吗检查 cond 并缩放变量残差解是否满足方程计算绝对和相对残差结构A 是否对称、三角或正定使用结构化方法容差数值上何时视为零设置并记录 rcond 或容差验证已知案例是否有效使用往返和合成测试# 紧凑的线性代数验证报告A np.array([[4.0, 1.0], [1.0, 3.0]])b np.array([1.0, 2.0])x np.linalg.solve(A, b)report {shape_A: A.shape,rank_A: np.linalg.matrix_rank(A),condition_A: np.linalg.cond(A),relative_residual: np.linalg.norm(A x - b) / np.linalg.norm(b),}print(report)numpy.linalg 最终检查表在乘法或求解前明确向量和矩阵形状。线性系统使用 solve而不是显式求逆。超定系统使用 lstsq并检查秩和残差。对称/Hermitian 特征问题使用 eigh使用 SVD 诊断秩和条件性。重要结果应报告尺度、容差、残差和数值限制。