Shortcuts

torch.linalg.householder_product

torch.linalg.householder_product(A, tau, *, out=None) 张量

计算Householder矩阵乘积的前n列。

K\mathbb{K}R\mathbb{R}C\mathbb{C},并 设 VKm×nV \in \mathbb{K}^{m \times n} 为一个矩阵,其列向量为 viKmv_i \in \mathbb{K}^m 对于 i=1,,mi=1,\ldots,mmnm \geq n。记 wiw_i 为由 将 i1i-1 个分量置零的 viv_i 并将其 ii 置为 1 的结果向量。 对于向量 τKk\tau \in \mathbb{K}^kknk \leq n,此函数计算矩阵的 前 <math

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}_mm 维单位矩阵,而 wHw^{\text{H}} 是当 ww 为复数时的共轭转置,当 ww 为实数时的转置。 输出矩阵的大小与输入矩阵 A 相同。

参见正交或酉矩阵的表示以获取更多详细信息。

支持float、double、cfloat和cdouble数据类型的输入。 还支持矩阵的批处理,如果输入是矩阵的批处理,则输出具有相同的批处理维度。

另请参阅

torch.geqrf() 可以与此函数一起使用,以形成 Qqr() 分解。

torch.ormqr() 是一个相关的函数,用于计算Householder矩阵的乘积与另一个矩阵的矩阵乘法。 然而,该函数不支持autograd。

警告

梯度计算仅在 taui1vi2tau_i \neq \frac{1}{||v_i||^2} 时才有意义。 如果不满足此条件,则不会抛出错误,但生成的梯度可能包含 NaN

Parameters
  • A (张量) – 形状为 (*, m, n) 的张量,其中 * 表示零个或多个批次维度。

  • tau (张量) – 形状为 (*, k) 的张量,其中 * 表示零个或多个批次维度。

Keyword Arguments

输出 (张量, 可选) – 输出张量。如果为,则忽略。默认值:

Raises

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)
优云智算