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 (см. issue 13 в magma).
-
L,UиPможно получить с помощьюtorch.lu_unpack().
Предупреждение
Градиенты этой функции будут конечными только тогда, когда
Aимеет полный ранг. Это связано с тем, что LU-разложение дифференцируемо только для матриц полного ранга. Кроме того, еслиAблизка к потере полного ранга, градиент будет численно неустойчивым, поскольку он зависит от вычисления и .- Параметры:
-
- A (Tensor) – тензор для разложения размера
-
pivot (bool, необязательно) – следует ли вычислять LU-разложение с частичным выбором главного элемента или обычное LU-разложение.
pivot= Falseне поддерживается на CPU. Значение по умолчанию:True. -
get_infos (bool, необязательно) – если установлено в
True, возвращает IntTensor с информацией. Значение по умолчанию:False -
out (tuple, необязательно) – необязательный выходной кортеж. Если
get_infosравноTrue, элементы кортежа — Tensor, IntTensor и IntTensor. Еслиget_infosравноFalse, элементы кортежа — Tensor и IntTensor. Значение по умолчанию:None
- Возвращает:
-
Кортеж тензоров, содержащий
- factorization (Tensor): разложение размера
-
pivots (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, это тензор размера , где ненулевые значения указывают, успешно ли выполнено разложение матрицы или каждого мини-пакета
- Тип возвращаемого значения:
-
(Tensor, 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 размера
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.lu.html