np.linalg.svd函数的奇异值分解详解
np.linalg.svd
是一个在 NumPy 库中的函数,用于执行奇异值分解(Singular Value Decomposition,简称 SVD)。奇异值分解是线性代数中的一种常见技术,用于将一个矩阵分解为三个矩阵的乘积。对于一个 m x n 的矩阵 A,SVD 分解可以表示为:
A = UΣV*
其中,U 是一个 m x m 的正交矩阵,Σ(使用希腊字母 Sigma 表示)是一个 m x n 的对角矩阵,其对角线上的元素是非负的,并按降序排列。这些对角线上的元素被称为奇异值。V* 是 V 的共轭转置,其中 V 是一个 n x n 的正交矩阵。
np.linalg.svd
函数的用法:
1 | U, s, Vh = np.linalg.svd(A, full_matrices=True, compute_uv=True, hermitian=False) |
参数说明:
A
: 需要分解的矩阵。full_matrices
: 布尔值,如果为 True,则 U 和 V 为正方形矩阵。如果为 False,则输出的 U 和 V 的维数会被缩减。compute_uv
: 布尔值,如果为 True,则计算 U 和 V。如果为 False,则只计算奇异值向量 s。hermitian
: 布尔值,如果为 True,且输入矩阵是 Hermitian 的,SVD 将使用更加高效的算法。
返回值:
U
: m x m 的正交矩阵。s
: 奇异值向量,长度为 min(m, n)。Vh
: n x n 的正交矩阵,是 V 的共轭转置。
现在来举个例子:
1 | import numpy as np |
在这个例子中,我们对一个 3x2 的矩阵 A 进行奇异值分解。由于 full_matrices
参数设置为 True
,U 矩阵的大小是 3x3,V* 矩阵的大小是 2x2。奇异值向量 s 的长度是 2。