torch.linalg.lu
-
torch.linalg.lu(A, *, pivot=True, out=None)[source] -
Вычисляет LU-разложение матрицы с частичным выбором главного элемента.
Пусть — это или , тогда LU-разложение с частичным выбором главного элемента матрицы определяется как
где
k = min(m,n), — это матрица перестановок, — нижняя треугольная матрица с единицами на диагонали, а — верхняя треугольная матрица.Если
pivot= FalseиAнаходится на GPU, то вычисляется LU-разложение без выбора главного элементаЕсли
pivot= False, возвращаемая матрицаPбудет пустой. LU-разложение без выбора главного элемента может не существовать, если какой-либо из главных миноровAявляется вырожденным. В этом случае выходная матрица может содержатьinfилиNaN.Поддерживаются входные данные типов float, double, cfloat и cdouble. Также поддерживаются пакеты матриц; если
Aявляется пакетом матриц, выходные данные имеют те же размерности пакета.См. также
torch.linalg.solve()решает систему линейных уравнений с использованием LU-разложения с частичным выбором главного элемента.Предупреждение
LU-разложение почти никогда не является единственным, поскольку часто существуют разные матрицы перестановок, которые могут давать разные LU-разложения. Поэтому на разных платформах, например в SciPy, или для входных данных на разных устройствах могут получаться разные корректные разложения.
Предупреждение
Вычисление градиентов поддерживается только в том случае, если входная матрица имеет полный ранг. Если это условие не выполнено, ошибка не возникнет, но градиент может быть не конечным. Это связано с тем, что LU-разложение с выбором главного элемента не является дифференцируемым в этих точках.
- Параметры:
- Аргументы-ключевые слова:
-
out (tuple, необязательно) – выходной кортеж из трех тензоров. Игнорируется, если
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')
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.linalg.lu.html