Spec-Zone.ru › PyTorch 2

torch.linalg.lu

torch.linalg.lu(A, *, pivot=True, out=None)

Вычисляет LU-разложение матрицы с частичным выбором опорных элементов.

Пусть K\mathbb{K} — R\mathbb{R} или C\mathbb{C}. LU-разложение с частичным выбором опорных элементов матрицы A∈Km×nA \in \mathbb{K}^{m \times n} определяется как

A=PLUP∈Km×m,L∈Km×k,U∈Kk×nA = PLU\mathrlap{\qquad P \in \mathbb{K}^{m \times m}, L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

где k = min(m,n), PP — матрица перестановок, LL — нижняя треугольная матрица с единицами на главной диагонали, а UU — верхняя треугольная матрица.

Если pivot= False и A находится на GPU, то вычисляется LU-разложение без выбора опорных элементов

A=LUL∈Km×k,U∈Kk×nA = LU\mathrlap{\qquad L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

Когда pivot= False, возвращаемая матрица P будет пустой. LU-разложение без выбора опорных элементов может отсутствовать, если любой из главных миноров A является вырожденной. В этом случае выходная матрица может содержать inf или NaN.

Поддерживает входные типы данных float, double, cfloat и cdouble. Также поддерживает пакеты матриц, и если A является пакетом матриц, то выходные данные имеют те же размерности пакета.

См. также

torch.linalg.solve() решает систему линейных уравнений с помощью LU-разложения с частичным выбором опорных элементов.

Предупреждение

LU-разложение почти никогда не является уникальным, поскольку часто существуют разные матрицы перестановок, которые могут приводить к разным LU-разложениям. Таким образом, разные платформы, такие как SciPy, или входные данные на разных устройствах могут создавать разные допустимые разложения.

Предупреждение

Вычисление градиента поддерживается только в том случае, если входная матрица имеет полную ранг. Если это условие не выполняется, ошибка не будет выброшена, но градиент может не быть конечным. Это происходит потому, что LU-разложение с выбором опорных элементов не дифференцируемо в этих точках.

Параметры
  • A (Tensor) – тензор формы (*, m, n), где * — ноль или более размерностей пакета.
  • pivot (bool, необязательно) – Управляет тем, вычислять ли LU-разложение с частичным выбором опорных элементов или без него. Значение по умолчанию: True.
Ключевые аргументы

out (кортеж, необязательно) – выходной кортеж из трех тензоров. Игнорируется, если None. Значение по умолчанию: None.

Возвращает

Именованный кортеж (P, L, U).

Примеры:

>>> A = torch.randn(3, 2)
>>> P, L, U = torch.linalg.lu(A)
>>> P
tensor([[0., 1., 0.],
        [0., 0., 1.],
        [1., 0., 0.]])
>>> L
tensor([[1.0000, 0.0000],
        [0.5007, 1.0000],
        [0.0633, 0.9755]])
>>> U
tensor([[0.3771, 0.0489],
        [0.0000, 0.9644]])
>>> torch.dist(A, P @ L @ U)
tensor(5.9605e-08)

>>> A = torch.randn(2, 5, 7, device="cuda")
>>> P, L, U = torch.linalg.lu(A, pivot=False)
>>> P
tensor([], device='cuda:0')
>>> torch.dist(A, L @ U)
tensor(1.0376e-06, device='cuda:0')

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.linalg.lu.html

Spec-Zone.ru

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