РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
249 of 541 menu

Функция linalg.svd

Функция linalg.svd выполняет сингулярное разложение (SVD) матрицы. Она разлагает матрицу A размером M x N на три матрицы: U, S и V^T, где A = U * S * V^T. Первым параметром функция принимает двумерный массив. Вторым параметром можно передать булево значение full_matrices, определяющее форму выходных матриц.

Синтаксис

np.linalg.svd(a, [full_matrices])

Пример

Выполним сингулярное разложение матрицы размером 2x3:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) U, S, Vt = np.linalg.svd(arr) print("U:") print(U) print("S:") print(S) print("Vt:") print(Vt)

Результат выполнения кода:

U: [[-0.3863177 -0.92236578] [-0.92236578 0.3863177 ]] S: [9.508032 0.77286964] Vt: [[-0.42866713 -0.56630692 -0.7039467 ] [ 0.80596391 0.11238241 -0.58119908] [ 0.40824829 -0.81649658 0.40824829]]

Пример

Получим сингулярное разложение с полными матрицами, используя параметр full_matrices:

import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) U, S, Vt = np.linalg.svd(arr, full_matrices=True) print("U shape:", U.shape) print("Vt shape:", Vt.shape)

Результат выполнения кода:

U shape: (3, 3) Vt shape: (2, 2)

Пример

Восстановим исходную матрицу из сингулярного разложения:

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) U, S, Vt = np.linalg.svd(arr) S_mat = np.zeros((arr.shape[0], arr.shape[1])) S_mat[:len(S), :len(S)] = np.diag(S) res = U @ S_mat @ Vt print(res)

Результат выполнения кода:

[[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]]

Пример

Используем сингулярное разложение для низкоранговой аппроксимации матрицы:

import numpy as np rng = np.random.default_rng(0) arr = rng.random((5, 5)) U, S, Vt = np.linalg.svd(arr) k = 2 U_k = U[:, :k] S_k = np.diag(S[:k]) Vt_k = Vt[:k, :] approx = U_k @ S_k @ Vt_k print(approx.round(3))

Результат выполнения кода:

[[0.712 0.472 0.436 0.411 0.287] [0.817 0.532 0.482 0.456 0.319] [0.861 0.556 0.501 0.474 0.333] [0.435 0.256 0.208 0.2 0.149] [0.741 0.47 0.421 0.398 0.283]]

Смотрите также

  • функцию eig,
    которая вычисляет собственные значения и собственные векторы квадратной матрицы
  • функцию eigh,
    которая вычисляет собственные значения и собственные векторы эрмитовой матрицы
  • функцию pinv,
    которая вычисляет псевдообратную матрицу через сингулярное разложение
  • функцию matrix_rank,
    которая вычисляет ранг матрицы на основе сингулярных чисел
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить