本文简要介绍 python 语言中 scipy.linalg.svd
的用法。
用法:
scipy.linalg.svd(a, full_matrices=True, compute_uv=True, overwrite_a=False, check_finite=True, lapack_driver='gesdd')#
奇异值分解。
因式分解矩阵a分解为两个酉矩阵
U
和Vh
,和一个一维数组s
奇异值(实数,非负)使得a == U @ S @ Vh
,其中S
是具有主对角线的适当形状的零矩阵s
.- a: (M, N) 数组
矩阵分解。
- full_matrices: 布尔型,可选
如果为真(默认),U和电压有形状的
(M, M)
,(N, N)
。如果为 False,则形状为(M, K)
和(K, N)
,其中K = min(M, N)
.- compute_uv: 布尔型,可选
除了
s
之外,是否还计算U
和Vh
。默认为真。- overwrite_a: 布尔型,可选
是否覆盖a;可以提高性能。默认为假。
- check_finite: 布尔型,可选
是否检查输入矩阵是否仅包含有限数。禁用可能会提高性能,但如果输入确实包含无穷大或 NaN,则可能会导致问题(崩溃、非终止)。
- lapack_driver: {‘gesdd’, ‘gesvd’},可选
是否使用更有效的分而治之方法 (
'gesdd'
) 还是通用矩形方法 ('gesvd'
) 来计算 SVD。 MATLAB 和 Octave 使用'gesvd'
方法。默认为'gesdd'
。
- U: ndarray
具有左奇异向量作为列的酉矩阵。形状
(M, M)
或者(M, K)
, 根据full_matrices.- s: ndarray
奇异值,按非递增顺序排序。形状 (K,),带有
K = min(M, N)
。- Vh: ndarray
以右奇异向量为行的酉矩阵。形状
(N, N)
或者(K, N)
根据full_matrices.- 对于
compute_uv=False
,仅返回s
。
- LinAlgError
如果 SVD 计算不收敛。
参数 ::
返回 ::
抛出 ::
例子:
>>> import numpy as np >>> from scipy import linalg >>> rng = np.random.default_rng() >>> m, n = 9, 6 >>> a = rng.standard_normal((m, n)) + 1.j*rng.standard_normal((m, n)) >>> U, s, Vh = linalg.svd(a) >>> U.shape, s.shape, Vh.shape ((9, 9), (6,), (6, 6))
从分解中重建原始矩阵:
>>> sigma = np.zeros((m, n)) >>> for i in range(min(m, n)): ... sigma[i, i] = s[i] >>> a1 = np.dot(U, np.dot(sigma, Vh)) >>> np.allclose(a, a1) True
或者,使用
full_matrices=False
(注意U
的形状是(m, n)
而不是(m, m)
):>>> U, s, Vh = linalg.svd(a, full_matrices=False) >>> U.shape, s.shape, Vh.shape ((9, 6), (6,), (6, 6)) >>> S = np.diag(s) >>> np.allclose(a, np.dot(U, np.dot(S, Vh))) True
>>> s2 = linalg.svd(a, compute_uv=False) >>> np.allclose(s, s2) True
相关用法
- Python SciPy linalg.svdvals用法及代码示例
- Python SciPy linalg.svds用法及代码示例
- Python SciPy linalg.solve_circulant用法及代码示例
- Python SciPy linalg.spsolve用法及代码示例
- Python SciPy linalg.spsolve_triangular用法及代码示例
- Python SciPy linalg.solve_banded用法及代码示例
- Python SciPy linalg.solve_discrete_lyapunov用法及代码示例
- Python SciPy linalg.splu用法及代码示例
- Python SciPy linalg.spilu用法及代码示例
- Python SciPy linalg.solve用法及代码示例
- Python SciPy linalg.solveh_banded用法及代码示例
- Python SciPy linalg.solve_sylvester用法及代码示例
- Python SciPy linalg.solve_toeplitz用法及代码示例
- Python SciPy linalg.sqrtm用法及代码示例
- Python SciPy linalg.sinm用法及代码示例
- Python SciPy linalg.schur用法及代码示例
- Python SciPy linalg.solve_continuous_lyapunov用法及代码示例
- Python SciPy linalg.solve_continuous_are用法及代码示例
- Python SciPy linalg.solve_discrete_are用法及代码示例
- Python SciPy linalg.solve_triangular用法及代码示例
- Python SciPy linalg.sinhm用法及代码示例
- Python SciPy linalg.signm用法及代码示例
- Python SciPy linalg.subspace_angles用法及代码示例
- Python SciPy linalg.eigvalsh_tridiagonal用法及代码示例
- Python SciPy linalg.cdf2rdf用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.svd。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。