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)
Восстановление на основе полного разложения по сингулярным значениям:
>>> 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
Восстановление на основе сокращенного разложения по сингулярным значениям:
>>> 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