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-разложение с выбором опорного элемента не дифференцируемо в этих точках.
- Parameters:
- Keyword Arguments:
-
out (tuple, необязательно) – кортеж выходных тензоров. Игнорируется, если
None. Значение по умолчанию:None. - Returns:
-
Именованный кортеж
(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/1.13/generated/torch.linalg.lu.html