numpy.linalg.svd
-
numpy.linalg.svd(a, full_matrices=1, compute_uv=1)[source] -
Разложение по сингулярным значениям.
Разлагает матрицу
aкакu * np.diag(s) * v, гдеuиvявляются унитарными, аs— одномерный массив сингулярных значений.Параметры: a : (..., M, N) array_like
Вещественная или комплексная матрица формы (
M,N).full_matrices : bool, необязательно
Если True (по умолчанию),
uиvимеют формы (M,M) и (N,N) соответственно. В противном случае формы равны (M,K) и (K,N) соответственно, гдеK= min(M,N).compute_uv : bool, необязательно
Вычислять ли
uиvдополнительно кs. По умолчанию True.Возвращает: u : { (..., M, M), (..., M, K) } array
Унитарные матрицы. Фактическая форма зависит от значения
full_matrices. Возвращается только приcompute_uv= True.s : (..., K) array
Сингулярные значения для каждой матрицы, отсортированные по убыванию.
v : { (..., N, N), (..., K, N) } array
Унитарные матрицы. Фактическая форма зависит от значения
full_matrices. Возвращается только приcompute_uv= True.Возможные исключения: LinAlgError
Если вычисление SVD не сходится.
Примечания
Добавлена в версии 1.8.0.
Применяются правила трансляции, см. документацию по
numpy.linalgдля подробностей.Разложение выполняется с помощью процедуры LAPACK _gesdd.
Разложение по сингулярным значениям обычно записывается как
a = U S V.H.v, возвращаемое этой функцией, являетсяV.Hиu = U.Если
U— унитарная матрица, это означает, что она удовлетворяет условиюU.H = inv(U).Строки
v— собственные векторыa.H a. Столбцыu— собственные векторыa a.H. Для строкиiвvи столбцаiвu, соответствующее собственное значение равноs[i]**2.Если
aявляется объектомmatrix(в отличие от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
© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.svd.html