Spec-Zone.ru › PyTorch 2.14

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 близка к потере полного ранга, градиент будет численно неустойчивым, поскольку он зависит от вычисления L−1L^{-1} и U−1U^{-1}.

Параметры:
  • A (Tensor) – тензор для разложения размера (∗,m,n)(*, m, n)
  • 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): разложение размера (∗,m,n)(*, m, n)
  • pivots (IntTensor): главные элементы размера (∗,min(m,n))(*, \text{min}(m, n)). pivots хранит все промежуточные перестановки строк. Итоговую перестановку perm можно восстановить, применяя swap(perm[i], perm[pivots[i] - 1]) для i = 0, ..., pivots.size(-1) - 1, где perm изначально является тождественной перестановкой из mm элементов (по сути, это и делает 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!

© 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

Spec-Zone.ru

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