qr
备注
本 API 支持两种签名方式:
paddle.linalg.qr(x, mode='reduced', name=None, *, out=None)``(Paddle 风格):通过 ``mode字符串参数控制 QR 分解。paddle.linalg.qr(input, some=True, *, out=None)``(PyTorch 风格):通过 ``some布尔参数控制 QR 分解。
计算一个或一批矩阵的正交三角分解,也称 QR 分解(暂不支持反向)。
记 \(X\) 为一个矩阵,则计算的结果为 2 个矩阵 \(Q\) 和 \(R\),则满足公式:
其中,\(Q\) 是正交矩阵,\(R\) 是上三角矩阵。
参数
x (Tensor):输入进行正交三角分解的一个或一批方阵,类型为 Tensor。
x的形状应为[*, M, N],其中*为零或更大的批次维度,数据类型支持 float32、float64、complex64、complex128。别名input,A。
- 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",则**只返回**缩减的 \(R\),其形状为[*, K, N]。name (str,可选) - 具体用法请参见 api_guide_Name,一般无需设置,默认值为 None。
关键字参数
- out (Tensor|tuple,可选) - 指定输出的张量。
当
mode = "r"时,为一个 Tensor 用于存储 R; 否则为一个(Q, R)张量元组,默认值为 None。
返回
如果
mode = "r",返回 Tensor R,即缩减的上三角矩阵。
- 否则返回
QrRetType(Q, R)具名元组:
Tensor Q,正交三角分解的 Q 正交矩阵。
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 ;