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

Функция linalg.lu

Функция linalg.lu выполняет LU-разложение квадратной или прямоугольной матрицы. Она возвращает разложение в виде трёх тензоров: матрицы перестановок P, нижней треугольной матрицы L и верхней треугольной матрицы U. Разложение удовлетворяет равенству P @ A = L @ U. Первым параметром функция принимает входную матрицу. Вторым параметром можно указать, нужно ли возвращать матрицу перестановок.

Синтаксис

torch.linalg.lu(A, [pivot])

Пример

Давайте выполним LU-разложение квадратной матрицы размера 3x3:

import torch A = torch.tensor([ [4.0, 3.0, 2.0], [1.0, 2.0, 3.0], [5.0, 4.0, 1.0], ]) P, L, U = torch.linalg.lu(A) print("P:") print(P) print("L:") print(L) print("U:") print(U)

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

P: tensor([ [0., 0., 1.], [1., 0., 0.], [0., 1., 0.], ]) L: tensor([ [1.0000, 0.0000, 0.0000], [0.2000, 1.0000, 0.0000], [0.8000, 0.5000, 1.0000], ]) U: tensor([ [5.0000, 4.0000, 1.0000], [0.0000, 1.2000, 2.8000], [0.0000, 0.0000, 2.5000], ])

Пример

Проверим, что разложение корректно: P @ A = L @ U:

import torch A = torch.tensor([ [4.0, 3.0, 2.0], [1.0, 2.0, 3.0], [5.0, 4.0, 1.0], ]) P, L, U = torch.linalg.lu(A) res = torch.matmul(P, A) res_lu = torch.matmul(L, U) print(torch.allclose(res, res_lu))

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

True

Пример

Выполним LU-разложение без возврата матрицы перестановок:

import torch A = torch.tensor([ [2.0, 1.0], [1.0, 2.0], ]) L, U = torch.linalg.lu(A, pivot=False) print("L:") print(L) print("U:") print(U)

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

L: tensor([ [1.0000, 0.0000], [0.5000, 1.0000], ]) U: tensor([ [2.0000, 1.0000], [0.0000, 1.5000], ])

Пример

Выполним LU-разложение прямоугольной матрицы размера 3x2:

import torch A = torch.tensor([ [1.0, 4.0], [2.0, 5.0], [3.0, 6.0], ]) P, L, U = torch.linalg.lu(A) print("L shape:", L.shape) print("U shape:", U.shape) print("U:") print(U)

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

L shape: torch.Size([3, 2]) U shape: torch.Size([2, 2]) U: tensor([ [3.0000, 6.0000], [0.0000, 1.0000], ])

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

  • функцию svd,
    которая выполняет сингулярное разложение матрицы
  • функцию qr,
    которая выполняет QR-разложение матрицы
  • функцию cholesky,
    которая выполняет разложение Холецкого
  • функцию solve,
    которая решает системы линейных уравнений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить