Spec-Zone.ru › PyTorch 1

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-разложение с выбором опорного элемента не дифференцируемо в этих точках.

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

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

Returns:

Именованный кортеж (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/1.13/generated/torch.linalg.lu.html

Spec-Zone.ru

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