本文簡要介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。