torch.linalg.lu
-
torch.linalg.lu(A, *, pivot=True, out=None) -
Вычисляет 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 (кортеж, необязательно) – выходной кортеж из трех тензоров. Игнорируется, если
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')
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.linalg.lu.html