qr

paddle.linalg. qr ( x, mode='reduced', name=None ) [源代码]

计算一个或一批矩阵的正交三角分解,也称 QR 分解(暂不支持反向)。

\(X\) 为一个矩阵,则计算的结果为 2 个矩阵 \(Q\)\(R\),则满足公式:

\[X = Q * R\]

其中,\(Q\) 是正交矩阵,\(R\) 是上三角矩阵。

参数

  • x (Tensor):输入进行正交三角分解的一个或一批方阵,类型为 Tensor。 x 的形状应为 [*, M, N],其中 * 为零或更大的批次维度,数据类型支持 float32, float64。

  • mode (str,可选):控制正交三角分解的行为,默认是 reduced,假设 x 形状应为 [*, M, N]K = min(M, N):如果 mode = "reduced",则 \(Q\) 形状为 [*, M, K]\(R\) 形状为 [*, K, N];如果 mode = "complete",则 \(Q\) 形状为 [*, M, M]\(R\) 形状为 [*, M, N];如果 mode = "r",则不返回 \(Q\),只返回 \(R\) 且形状为 [*, K, N]

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

  • Tensor Q,正交三角分解的 Q 正交矩阵,需注意如果 mode = "reduced",则不返回 Q 矩阵,只返回 R 矩阵。

  • Tensor R,正交三角分解的 R 上三角矩阵。

代码示例

>>> import paddle

>>> x = paddle.to_tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]).astype('float64')
>>> q, r = paddle.linalg.qr(x)
>>> print (q)
Tensor(shape=[3, 2], dtype=float64, place=Place(cpu), stop_gradient=True,
[[-0.16903085,  0.89708523],
 [-0.50709255,  0.27602622],
 [-0.84515425, -0.34503278]])
>>> print (r)
Tensor(shape=[2, 2], dtype=float64, place=Place(cpu), stop_gradient=True,
[[-5.91607978, -7.43735744],
 [ 0.        ,  0.82807867]])

>>> # one can verify : X = Q * R ;

使用本API的教程文档