Spec-Zone.ru › PyTorch 2.14

torch.linalg.polar

torch.linalg.polar(A, *, out=None) [исходный код]

Вычисляет полярное разложение матрицы.

Пусть K\mathbb{K} — это R\mathbb{R} или C\mathbb{C}. Полярное разложение матрицы A∈Km×nA \in \mathbb{K}^{m \times n} при m >= n определяется следующим образом:

A=UHU∈Km×n,H∈Kn×nA = UH\mathrlap{\qquad U \in \mathbb{K}^{m \times n}, H \in \mathbb{K}^{n \times n}}

где UU имеет ортонормированные столбцы (в случае вещественных чисел матрица ортогональна, а в случае комплексных — унитарна), а HH — симметричная положительно полуопределённая матрица в случае вещественных чисел и эрмитова положительно полуопределённая матрица в случае комплексных чисел.

Ортогональный множитель UU — ближайшая к AA матрица с ортонормированными столбцами в норме Фробениуса, поэтому полярное разложение удобно использовать для ортогонализации.

Примечание

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API