torch.lu
-
torch.lu(*args, **kwargs) -
Вычисляет LU-разложение матрицы или набора матриц
A. Возвращает кортеж, содержащий LU-разложение и перестановкиA. Перестановки выполняются, еслиpivotустановлено вTrue.Предупреждение
torch.lu()устарело и рекомендуется использоватьtorch.linalg.lu_factor()иtorch.linalg.lu_factor_ex().torch.lu()будет удалена в будущих выпусках PyTorch.LU, pivots, info = torch.lu(A, compute_pivots)следует заменить наLU, pivots = torch.linalg.lu_factor(A, compute_pivots)
LU, pivots, info = torch.lu(A, compute_pivots, get_infos=True)следует заменить наLU, pivots, info = torch.linalg.lu_factor_ex(A, compute_pivots)
Примечание
- Возвращаемая матрица перестановок для каждой матрицы в наборе представлена 1-индексированным вектором размера
min(A.shape[-2], A.shape[-1]).pivots[i] == jуказывает, что наiшаге алгоритмаiстрока была переставлена соj-1строкой. - LU-разложение с
pivot=Falseнедоступно для CPU, и попытка выполнить его приведет к ошибке. Однако LU-разложение сpivot=Falseдоступно для CUDA. - Данная функция не проверяет успешность разложения, если
get_infosравноTrue, поскольку информация о статусе разложения находится в третьем элементе возвращаемого кортежа. - В случае наборов квадратных матриц размером не более 32 на устройстве CUDA LU-разложение повторяется для сингулярных матриц из-за ошибки в библиотеке MAGMA (см. проблему MAGMA 13).
-
L,U, иPможно получить с помощьюtorch.lu_unpack().
Предупреждение
Градиенты этой функции будут конечными только когда
Aимеет полный ранг. Это связано с тем, что LU-разложение дифференцируемо только для матриц с полным рангом. Кроме того, еслиAблизка к тому, чтобы не иметь полный ранг, градиент будет численно неустойчив, поскольку он зависит от вычисления и .- Параметры:
-
- A (Тензор) – тензор для разложения размером
-
pivot (bool, необязательно) – управляет выполнением перестановки. Значение по умолчанию:
True -
get_infos (bool, необязательно) – если установлено в
True, возвращает IntTensor с информацией. Значение по умолчанию:False -
out (кортеж, необязательно) – необязательный выходной кортеж. Если
get_infosравноTrue, элементы кортежа — Tensor, IntTensor и IntTensor. Еслиget_infosравноFalse, элементы кортежа — Tensor и IntTensor. Значение по умолчанию:None
- Возвращаемые значения:
-
Кортеж тензоров, содержащий:
- разложение (Тензор): разложение размером
-
перестановки (IntTensor): перестановки размером .
pivotsхранит все промежуточные перестановки строк. Конечная перестановкаpermможет быть восстановлена применениемswap(perm[i], perm[pivots[i] - 1])дляi = 0, ..., pivots.size(-1) - 1, гдеpermизначально представляет собой тождественную перестановку из элементов (суть того, что делаетtorch.lu_unpack()). -
infos (IntTensor, необязательно): если
get_infosравноTrue, это тензор размера , где ненулевые значения указывают на успешность или неудачу разложения для каждой матрицы или каждого набора матриц.
- Тип возвращаемого значения:
-
(Тензор, IntTensor, IntTensor (необязательно))
Пример:
>>> A = torch.randn(2, 3, 3) >>> A_LU, pivots = torch.lu(A) >>> A_LU tensor([[[ 1.3506, 2.5558, -0.0816], [ 0.1684, 1.1551, 0.1940], [ 0.1193, 0.6189, -0.5497]], [[ 0.4526, 1.2526, -0.3285], [-0.7988, 0.7175, -0.9701], [ 0.2634, -0.9255, -0.3459]]]) >>> pivots tensor([[ 3, 3, 3], [ 3, 3, 3]], dtype=torch.int32) >>> A_LU, pivots, info = torch.lu(A, get_infos=True) >>> if info.nonzero().size(0) == 0: ... print('LU factorization succeeded for all samples!') LU factorization succeeded for all samples! - Возвращаемая матрица перестановок для каждой матрицы в наборе представлена 1-индексированным вектором размера
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.lu.html