torch.linalg.polar
-
torch.linalg.polar(A, *, out=None)[исходный код] -
Вычисляет полярное разложение матрицы.
Пусть — это или . Полярное разложение матрицы при
m >= nопределяется следующим образом:где имеет ортонормированные столбцы (в случае вещественных чисел матрица ортогональна, а в случае комплексных — унитарна), а — симметричная положительно полуопределённая матрица в случае вещественных чисел и эрмитова положительно полуопределённая матрица в случае комплексных чисел.
Ортогональный множитель — ближайшая к матрица с ортонормированными столбцами в норме Фробениуса, поэтому полярное разложение удобно использовать для ортогонализации.
Примечание
torch.linalg.polar()вычисляет полярное разложение матрицы, как и scipy.linalg.polar из SciPy. Эта функция не связана сtorch.polar(), которая строит комплексный тензор из модулей и углов, какstd::polarв C++.Поддерживаются входные данные с типами float, double, cfloat и cdouble. Также поддерживаются пакеты матриц; если
Aпредставляет собой пакет матриц, то выходные данные имеют те же размеры пакета.На CUDA вычисление выполняется с помощью алгоритма Dynamically Weighted Halley на основе QR (QDWH) через cuSOLVER, если установлен nvmath-python и версия среды выполнения cuSOLVER не ниже 12.2 (CUDA 13.2, в которой появилась необходимая процедура
cusolverDnXpolar); в противном случае (а также на CPU) используется вычисление на основе SVD.Примечание
Поддерживаются градиенты относительно
A. Полярное разложение дифференцируемо, еслиAимеет полный столбцовый ранг; градиент не определён дляAс неполным рангом.Предупреждение
Эта функция является «экспериментальной» и может измениться в будущих выпусках PyTorch.
- Параметры:
-
A (Tensor) – тензор формы
(*, m, n)сm >= n, где*— ноль или более пакетных измерений. - Именованные аргументы:
-
out (tuple, необязательный) – выходной кортеж из двух тензоров. Игнорируется, если
None. По умолчанию:None. - Возвращает:
-
Именованный кортеж
(U, H).
Примеры:
>>> A = torch.randn(4, 3) >>> U, H = torch.linalg.polar(A) >>> torch.dist(U @ H, A) tensor(7.1512e-07) >>> torch.dist(U.mT @ U, torch.eye(3)) tensor(4.8995e-07)
© 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.polar.html