原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.svd.html
校对:(虚位以待)
numpy.linalg.
svd
(a, full_matrices=1, compute_uv=1)[source]奇异值分解。
将矩阵a视为u * np.diag(s) t5> v
,其中u和v是幺正的且s的a的奇异值。
参数: | a:(...,M,N)array_like
full_matrices:bool,可选
compute_uv:bool,可选
|
---|---|
返回: | u:{(...,M,M),(...,M,K)}数组
s:(...,K)数组
v:{(...,N,N),(...,K,N)}数组
|
异常: | LinAlgError
|
笔记
版本1.8.0中的新功能。
广播规则适用,有关详细信息,请参阅numpy.linalg
文档。
使用LAPACK程序_gesdd执行分解
SVD通常写为a = U S VH / t0>。
由此函数返回的v是V.H
和u =
。
如果U
是酉矩阵,则意味着满足UH = inv(U) / t2>。
v的行是a.H a
的特征向量。u的列是a a.H
的特征向量。对于v中的行i
和u中的列i
,对应的特征值是s[i]**2
。
如果a是矩阵对象(而不是ndarray),那么所有返回值也是如此。
例子
>>> a = np.random.randn(9, 6) + 1j*np.random.randn(9, 6)
基于全SVD的重建:
>>> U, s, V = np.linalg.svd(a, full_matrices=True)
>>> U.shape, V.shape, s.shape
((9, 9), (6, 6), (6,))
>>> S = np.zeros((9, 6), dtype=complex)
>>> S[:6, :6] = np.diag(s)
>>> np.allclose(a, np.dot(U, np.dot(S, V)))
True
基于减少SVD的重建:
>>> U, s, V = np.linalg.svd(a, full_matrices=False)
>>> U.shape, V.shape, s.shape
((9, 6), (6, 6), (6,))
>>> S = np.diag(s)
>>> np.allclose(a, np.dot(U, np.dot(S, V)))
True