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().- Parameters:
-
A (Tensor) – тензор формы
(*, m, n)где*— ноль или более размерностей пакета. - Keyword Arguments:
-
-
pivot (bool, optional) – Вычислять ли LU-разложение с частичным выбором опорного элемента или обычное LU-разложение.
pivot= Falseне поддерживается на CPU. По умолчанию:True. -
out (tuple, optional) – кортеж из двух тензоров, в которые необходимо записать выходные данные. Игнорируется, если
None. По умолчанию:None.
-
pivot (bool, optional) – Вычислять ли LU-разложение с частичным выбором опорного элемента или обычное LU-разложение.
- Returns:
-
Именованная кортеж
(LU, pivots). - Raises:
-
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/1.13/generated/torch.linalg.lu_factor.html