Spec-Zone.ru › NumPy 1.13

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API