NumPy 函数手册:线性代数
在线性代数、科学计算以及机器学习中经常需要进行矩阵乘法、求解线性方程组、矩阵分解以及向量与矩阵范数计算等操作。NumPy 提供了一组线性代数函数主要集中在 numpy.linalg 模块中用于完成这些运算。这些函数采用高度向量化实现并调用底层高性能数学库如 BLAS 与 LAPACK能够高效处理向量与矩阵计算任务。按照功能划分NumPy 中常用的线性代数函数通常可以分为以下几类1矩阵与向量乘法及幂运算2矩阵分解3线性方程组求解4矩阵特征值与特征向量5矩阵范数与条件数6矩阵逆与伪逆7矩阵行列式与秩一、矩阵与向量乘法及幂运算matmul()用于执行矩阵乘法运算Matrix Multiplication。与 Python 的 运算符等价。numpy.matmul(a, b)参数说明• a输入数组或矩阵• b输入数组或矩阵函数行为说明当输入为高维数组时matmul() 会对最后两个维度执行矩阵乘法其余维度作为批处理维度。示例A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) np.matmul(A, B)# [[19 22]# [43 50]]等价写法A Bdot()计算向量点积或矩阵乘法Dot Product。numpy.dot(a, b)函数行为说明• 对一维数组执行向量点积• 对二维数组执行矩阵乘法• 对更高维数组按照最后一维与倒数第二维进行乘法运算参数说明• a输入数组或矩阵• b输入数组或矩阵示例 1向量点积import numpy as np a np.array([1, 2, 3])b np.array([4, 5, 6]) np.dot(a, b)# 32解释1×4 2×5 3×6 32示例 2矩阵乘法A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) np.dot(A, B)# [[19 22]# [43 50]]说明在二维矩阵场景下dot() 与 matmul() 的结果通常一致但在更高维数组上两者的广播与乘法语义并不完全相同实际使用中通常更推荐使用 matmul() 或 表达矩阵乘法。multi_dot()计算多个矩阵的连乘并自动选择较优的乘法顺序。numpy.linalg.multi_dot(arrays)参数说明• arrays由多个数组组成的序列示例A np.array([[1, 2], [3, 4]]) B np.array([[5, 6], [7, 8]]) C np.array([[1], [2]]) np.linalg.multi_dot([A, B, C])# [[ 63]# [143]]该运算等价于(A B) C说明multi_dot() 会自动选择更高效的矩阵乘法顺序特别适用于多个矩阵连乘的场景。matrix_power()计算方阵的整数次幂Matrix Power。numpy.linalg.matrix_power(a, n)参数说明• a输入方阵• n整数幂可以为正整数、负整数或 0返回a 的 n 次幂结果形状与原矩阵相同。函数行为说明• 当 n 0 时计算 a 的正整数次幂• 当 n 0 时返回与 a 同形状的单位矩阵• 当 n 0 时先计算 a 的逆矩阵再求其 |n| 次幂• 若 a 不是方阵或 n 0 且矩阵不可逆则会报错示例 1A np.array([[1, 2], [3, 4]]) np.linalg.matrix_power(A, 2)# [[ 7 10]# [15 22]]示例 2A np.array([[1, 2], [3, 4]]) np.linalg.matrix_power(A, 0)# [[1 0]# [0 1]]示例 3A np.array([[1, 2], [3, 4]]) np.linalg.matrix_power(A, -1)# 等价于 np.linalg.inv(A)说明matrix_power() 适用于状态转移矩阵、递推关系、图路径计数等问题。它计算的是矩阵乘法意义下的幂不是元素逐个求幂若需要逐元素幂运算应使用 ** 或 np.power()。二、矩阵分解svd()奇异值分解Singular Value Decomposition。完整形式numpy.linalg.svd(a, full_matricesTrue, compute_uvTrue)常用形式numpy.linalg.svd(a)参数说明• a输入矩阵返回U, S, Vt其中• U左奇异向量矩阵• S奇异值数组• Vt右奇异向量矩阵的转置示例A np.array([[1, 2], [3, 4]]) U, S, Vt np.linalg.svd(A)奇异值分解广泛应用于• 主成分分析PCA• 降维• 矩阵近似svdvals()计算矩阵的奇异值但不返回奇异向量。numpy.linalg.svdvals(a)参数说明• a输入矩阵示例A np.array([[1, 2], [3, 4]]) np.linalg.svdvals(A)说明若只需要奇异值而不需要奇异向量可直接使用该函数。qr()QR 分解。numpy.linalg.qr(a)参数说明• a输入矩阵返回Q, R其中• Q正交矩阵• R上三角矩阵示例A np.array([[1, 2], [3, 4]]) Q, R np.linalg.qr(A)说明QR 分解常用于最小二乘问题以及数值稳定的线性方程求解。cholesky()Cholesky 分解。numpy.linalg.cholesky(a)参数说明• a输入方阵必须是对称正定矩阵返回L满足A L L.T示例A np.array([[4, 2], [2, 3]]) L np.linalg.cholesky(A)Cholesky 分解常用于• 协方差矩阵分解• 数值优化• 高效求解线性方程组三、线性方程组求解solve()用于求解满秩方阵对应的线性方程组。若系数矩阵奇异或不是方阵应考虑 lstsq() 等方法。numpy.linalg.solve(a, b)参数说明• a系数矩阵• b常数向量求解Ax b示例A np.array([[3, 1], [1, 2]]) b np.array([9, 8]) np.linalg.solve(A, b)# [2. 3.]结果即为x 2y 3lstsq()最小二乘解Least Squares Solution。numpy.linalg.lstsq(a, b, rcondNone)参数说明• a系数矩阵• b目标向量• rcond截断阈值示例A np.array([[1, 1], [1, 2], [1, 3]]) b np.array([1, 2, 2]) x, residuals, rank, s np.linalg.lstsq(A, b, rcondNone)最小二乘法常用于• 线性回归• 数据拟合四、矩阵特征值与特征向量eig()计算矩阵特征值与特征向量。numpy.linalg.eig(a)参数说明• a方阵返回w, v其中• w特征值• v特征向量示例A np.array([[2, 0], [0, 3]]) w, v np.linalg.eig(A)print(w)# [2. 3.]特征值分解常用于• PCA• 动态系统分析• 马尔可夫链eigh()计算实对称矩阵或 Hermitian 矩阵的特征值与特征向量。numpy.linalg.eigh(a)参数说明• a实对称矩阵或 Hermitian 矩阵返回w, v其中• w特征值• v特征向量说明eigh() 专门用于实对称矩阵或 Hermitian 矩阵通常比 eig() 更适合这类问题数值上也更稳定。常用于• 协方差矩阵分析• 主成分分析PCAeigvals()计算矩阵特征值但不返回特征向量。numpy.linalg.eigvals(a)参数说明• a输入方阵示例A np.array([[2, 0], [0, 3]]) np.linalg.eigvals(A)# [2. 3.]说明eigvals() 返回一般方阵的特征值不返回特征向量。结果通常不保证排序对于实矩阵特征值也可能为复数。eigvalsh()计算实对称矩阵或 Hermitian 矩阵的特征值但不返回特征向量。numpy.linalg.eigvalsh(a, UPLOL)参数说明• a实对称矩阵或 Hermitian 矩阵• UPLO指定使用矩阵的哪一部分参与计算- L使用下三角部分默认- U使用上三角部分返回按升序排列的特征值数组。示例A np.array([[2, 1], [1, 2]]) np.linalg.eigvalsh(A)# array([1., 3.])说明eigvalsh() 与 eigh() 类似适用于实对称矩阵或复 Hermitian 矩阵。二者的区别在于• eigh()返回特征值和特征向量• eigvalsh()只返回特征值因此当只关心特征值而不需要特征向量时eigvalsh() 更直接也更节省计算开销。五、矩阵范数与条件数norm()计算向量或矩阵范数Norm。numpy.linalg.norm(x, ordNone, axisNone, keepdimsFalse)参数说明• x输入向量或矩阵• ord范数类型。ord 的具体含义取决于输入对象向量或矩阵常见类型向量- None默认计算 2-范数- 1L1 范数- 2L2 范数 对于矩阵ordNone 时通常对应默认矩阵范数ord 的具体解释应结合输入维度理解• axis指定沿哪个轴计算范数• keepdims是否保留被约简的维度示例a np.array([3, 4]) np.linalg.norm(a)# 5.0说明这里计算的是向量长度欧几里得范数。cond()计算矩阵条件数Condition Number。默认计算基于 2-范数的条件数。numpy.linalg.cond(x, pNone)参数说明• x输入矩阵• p范数类型默认使用 2-范数条件数示例A np.array([[1, 2], [3, 4]]) np.linalg.cond(A)说明条件数用于衡量矩阵的数值稳定性条件数越大数值误差越容易放大。六、矩阵逆与伪逆inv()计算矩阵的逆矩阵。numpy.linalg.inv(a)参数说明• a方阵示例A np.array([[1, 2], [3, 4]]) np.linalg.inv(A)说明输入必须是方阵且该方阵可逆否则会引发线性代数错误。在数值计算中若目的是求解线性方程组通常优先使用 solve()而不是先求逆再相乘。pinv()计算矩阵的伪逆Moore-Penrose Pseudoinverse。numpy.linalg.pinv(a)参数说明• a输入矩阵示例A np.array([[1, 2], [3, 4], [5, 6]]) np.linalg.pinv(A)伪逆常用于• 不可逆矩阵• 线性回归• 最小二乘问题七、矩阵行列式与秩det()计算矩阵行列式Determinant。numpy.linalg.det(a)参数说明• a方阵示例A np.array([[1, 2], [3, 4]]) np.linalg.det(A)# -2.0说明行列式为 0 表示矩阵不可逆。matrix_rank()计算矩阵秩Matrix Rank。numpy.linalg.matrix_rank(a)参数说明• a输入矩阵示例A np.array([[1, 2], [2, 4]]) np.linalg.matrix_rank(A)# 1说明矩阵秩表示矩阵中线性无关行或列的数量。slogdet()以更稳定的方式计算矩阵行列式的符号与对数绝对值。numpy.linalg.slogdet(a)参数说明• a输入方阵返回• sign行列式的符号• logabsdet行列式绝对值的自然对数即 log(abs(det(a)))示例A np.array([[1, 2], [3, 4]]) sign, logabsdet np.linalg.slogdet(A) print(sign) # -1.0print(logabsdet) # 约 0.693147...说明因为 det(A) -2所以其符号 sign -1又因为 abs(det(A)) 2故 logabsdet log(2) ≈ 0.693147。补充说明slogdet() 适合处理行列式绝对值很大或很小的矩阵。与直接计算 det() 相比它在数值上更稳定更不容易因为浮点数范围限制而产生上溢或下溢。若需要恢复原行列式可利用det sign * np.exp(logabsdet)当矩阵行列式为 0 时返回结果中 sign 为 0logabsdet 为 -inf。对复数矩阵sign 可能是模长为 1 的复数而不只是 -1、0、1。 小结NumPy 在 numpy.linalg 模块中提供了一组用于线性代数计算的函数体系包括矩阵与向量乘法及幂运算matmul、dot、multi_dot、matrix_power、矩阵分解svd、qr、cholesky、线性方程组求解solve、lstsq、特征值与特征向量计算eig、eigh、eigvals、eigvalsh以及范数、条件数、逆矩阵、伪逆、行列式、对数行列式和矩阵秩等分析工具。这些函数广泛应用于科学计算、机器学习、信号处理与数值优化等领域。“点赞有美意赞赏是鼓励”