torch.linalg.lu_factor
-
torch.linalg.lu_factor(A, *, bool pivot=True, out=None) -> (Tensor, Tensor) -
Вычисляет компактное представление LU-разложения матрицы с частичным выбором опор.
Эта функция вычисляет компактное представление разложения, заданного
torch.linalg.lu(). Если матрица квадратная, это представление можно использовать вtorch.linalg.lu_solve()для решения системы линейных уравнений, которая использует матрицуA.Возвращаемое разложение представлено как именованная кортеж
(LU, pivots). МатрицаLUимеет ту же форму, что и входная матрицаA. Её верхняя и нижняя треугольные части кодируют неконстантные элементыLиULU-разложения матрицыA.Возвращаемая матрица перестановок представлена вектором с индексацией с 1.
pivots[i] == jобозначает, что наiшаге алгоритмаi-я строка была переставлена соj-1-й строкой.На CUDA можно использовать
pivot= False. В этом случае функция возвращает LU-разложение без выбора опор, если оно существует.Поддерживает типы данных float, double, cfloat и cdouble. Также поддерживает пакеты матриц, и если входные данные являются пакетами матриц, то выходные данные имеют те же размерности пакета.
Примечание
При использовании входных данных на устройстве CUDA эта функция синхронизирует это устройство с процессором. Для версии этой функции, которая не выполняет синхронизацию, см.
torch.linalg.lu_factor_ex().Предупреждение
LU-разложение почти никогда не является уникальным, так как часто существуют разные матрицы перестановок, которые могут привести к разным LU-разложениям. Поэтому разные платформы, такие как SciPy, или входные данные на разных устройствах, могут создавать разные допустимые разложения.
Вычисления градиентов поддерживаются только если входная матрица имеет полный ранг. Если это условие не выполняется, ошибка не будет выброшена, но градиент может быть не конечным. Это происходит потому, что LU-разложение с выбором опор не является дифференцируемым в этих точках.
См. также
torch.linalg.lu_solve()решает систему линейных уравнений, используя результат этой функции, при условии, что входная матрица квадратная и обратимая.torch.lu_unpack()распаковывает тензоры, возвращаемые функциейlu_factor(), в три матрицыP, L, U, которые образуют разложение.torch.linalg.lu()вычисляет LU-разложение с частичным выбором опор для возможно неквадратной матрицы. Это композицияlu_factor()иtorch.lu_unpack().torch.linalg.solve()решает систему линейных уравнений. Это композицияlu_factor()иlu_solve().- Параметры
-
A (Тензор) – тензор формы
(*, m, n), где*— это ноль или более размерностей пакета. - Ключевые аргументы
- Возвращает
-
Именованный кортеж
(LU, pivots). - Возбуждает
-
RuntimeError – если матрица
Aне является обратимой или любая матрица в пакетеAне является обратимой.
Примеры:
>>> A = torch.randn(2, 3, 3) >>> B1 = torch.randn(2, 3, 4) >>> B2 = torch.randn(2, 3, 7) >>> A_factor = torch.linalg.lu_factor(A) >>> X1 = torch.linalg.lu_solve(A_factor, B1) >>> X2 = torch.linalg.lu_solve(A_factor, B2) >>> torch.allclose(A @ X1, B1) True >>> torch.allclose(A @ X2, B2) True
© 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_factor.html