torch.linalg.householder_product¶
- torch.linalg.householder_product(A, tau, *, out=None) Tensor ¶
计算 Householder 矩阵乘积的前 n 列。
令 为 或 ,令 为一个矩阵,其列向量为 对于 ,其中 。用 表示将 的前 个分量置零,并将第 个分量设为 1 所得到的向量。对于一个向量 ,其中 ,该函数计算矩阵的前 列
其中 是 m 维单位矩阵,而 当 为复数时是共轭转置,当 为实数时是转置。 输出矩阵与输入矩阵
A
大小相同。有关更多详细信息,请参阅 正交或酉矩阵的表示。
支持 float、double、cfloat 和 cdouble 数据类型。 也支持矩阵批次,如果输入是矩阵批次,则输出具有相同的批次维度。
另请参阅
torch.geqrf()
可以与该函数一起使用来从qr()
分解中形成 Q。torch.ormqr()
是一个相关的函数,它计算豪斯霍尔德矩阵乘积与另一个矩阵的矩阵乘积。 但是,该函数不受自动梯度支持。警告
仅当 时,梯度计算才有意义。 如果不满足此条件,则不会抛出错误,但生成的梯度可能包含 NaN。
- 参数
- 关键字参数
out (Tensor, optional) – 输出张量。 如果为 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)