Spec-Zone.ru › PyTorch 1

torch.linalg.householder_product

torch.linalg.householder_product(A, tau, *, out=None) → Tensor

Вычисляет первые n столбцы произведения матриц Хаусхолдера.

Пусть K\mathbb{K} — это R\mathbb{R} или C\mathbb{C}, и пусть V∈Km×nV \in \mathbb{K}^{m \times n} — матрица со столбцами vi∈Kmv_i \in \mathbb{K}^m для i=1,…,mi=1,\ldots,m при m≥nm \geq n. Обозначим через wiw_i вектор, полученный обнулением первых i−1i-1 компонент viv_i и установкой в 1 ii-го. Для вектора τ∈Kk\tau \in \mathbb{K}^k с k≤nk \leq n, эта функция вычисляет первые nn столбцов матрицы

H1H2...HkwithHi=Im−τiwiwiHH_1H_2 ... H_k \qquad\text{with}\qquad H_i = \mathrm{I}_m - \tau_i w_i w_i^{\text{H}}

где Im\mathrm{I}_m — m-мерная единичная матрица, и wHw^{\text{H}} — сопряжённый транспонированный, когда ww комплексный, и транспонированный, когда ww вещественный. Результирующая матрица имеет тот же размер, что и входная матрица A.

Дополнительные сведения см. в Представление ортогональных или унитарных матриц.

Поддерживает входные данные типов float, double, cfloat и cdouble. Также поддерживает пакеты матриц, и если входные данные — пакеты матриц, то выходные данные имеют те же размерности пакета.

См. также

torch.geqrf() может быть использована вместе с этой функцией для формирования Q из разложения qr().

torch.ormqr() — это родственная функция, которая вычисляет матричное произведение произведения матриц Хаусхолдера с другой матрицей. Однако эта функция не поддерживает автоградиент.

Предупреждение

Вычисления градиента определены корректно только если taui≠1∣∣vi∣∣2tau_i \neq \frac{1}{||v_i||^2}. Если это условие не выполняется, ошибка не будет сгенерирована, но полученный градиент может содержать NaN.

Параметры:
  • A (Tensor) – тензор формы (*, m, n) где * — это ноль или более размерностей пакета.
  • tau (Tensor) – тензор формы (*, k) где * — это ноль или более размерностей пакета.
Ключевые аргументы:

out (Tensor, необязательно) – тензор вывода. Игнорируется, если None. По умолчанию: None.

Исключения:

RuntimeError – если A не удовлетворяет требованию m >= n, или tau не удовлетворяет требованию n >= k.

Примеры:

>>> A = torch.randn(2, 2)
>>> h, tau = torch.geqrf(A)
>>> Q = torch.linalg.householder_product(h, tau)
>>> torch.dist(Q, torch.linalg.qr(A).Q)
tensor(0.)

>>> h = torch.randn(3, 2, 2, dtype=torch.complex128)
>>> tau = torch.randn(3, 1, dtype=torch.complex128)
>>> Q = torch.linalg.householder_product(h, tau)
>>> Q
tensor([[[ 1.8034+0.4184j,  0.2588-1.0174j],
        [-0.6853+0.7953j,  2.0790+0.5620j]],

        [[ 1.4581+1.6989j, -1.5360+0.1193j],
        [ 1.3877-0.6691j,  1.3512+1.3024j]],

        [[ 1.4766+0.5783j,  0.0361+0.6587j],
        [ 0.6396+0.1612j,  1.3693+0.4481j]]], dtype=torch.complex128)

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.linalg.householder_product.html

Spec-Zone.ru

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