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–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.linalg.svd.html