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, optional
Если True (по умолчанию),
uиvимеют формы (M,M) и (N,N) соответственно. В противном случае формы соответственно (M,K) и (K,N), гдеK= min(M,N).compute_uv : bool, optional
Вычислять ли
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
Разложение SVD обычно записывается как
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–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.linalg.svd.html