numpy.linalg.svd(a, full_matrices=1, compute_uv=1)
[source]
Singular Value Decomposition.
Factors the matrix a
as u * np.diag(s) * v
, where u
and v
are unitary and s
is a 1-d array of a
‘s singular values.
Parameters: |
a : (..., M, N) array_like A real or complex matrix of shape ( full_matrices : bool, optional If True (default), compute_uv : bool, optional Whether or not to compute |
---|---|
Returns: |
u : { (..., M, M), (..., M, K) } array Unitary matrices. The actual shape depends on the value of s : (..., K) array The singular values for every matrix, sorted in descending order. v : { (..., N, N), (..., K, N) } array Unitary matrices. The actual shape depends on the value of |
Raises: |
LinAlgError If SVD computation does not converge. |
New in version 1.8.0.
Broadcasting rules apply, see the numpy.linalg
documentation for details.
The decomposition is performed using LAPACK routine _gesdd
The SVD is commonly written as a = U S V.H
. The v
returned by this function is V.H
and u = U
.
If U
is a unitary matrix, it means that it satisfies U.H = inv(U)
.
The rows of v
are the eigenvectors of a.H a
. The columns of u
are the eigenvectors of a a.H
. For row i
in v
and column i
in u
, the corresponding eigenvalue is s[i]**2
.
If a
is a matrix
object (as opposed to an ndarray
), then so are all the return values.
>>> a = np.random.randn(9, 6) + 1j*np.random.randn(9, 6)
Reconstruction based on full 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
Reconstruction based on reduced 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
© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.linalg.svd.html