---
title: linalg.qr
description: "计算矩阵的QR分解。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_1118.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_1118.html
indexId: 1101aa5dbee47771f6fe02155dfb5d1238f2d33bbbc1b1bdaa459ab41526d0c261
---
# linalg.qr

#### 功能描述

计算矩阵的QR分解。

将矩阵a因子分解为q和r矩阵，其中q是正交的，r是上三角形的。


#### 必选输入参数

| 参数名 | 类型 | 说明 |
| --- | --- | --- |
| a | array\_like, shape (…, M, N) | 维度至少为2的类数组对象。 |


#### 可选输入参数

| 参数名 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| mode | {‘reduced’,‘complete’,‘r’,‘raw’} | ‘reduced’ | 如果K=min（M,N），那么： “reduced”返回q，r，尺寸分别为(...,M,K)、(...,K,N)。 “complete”：返回q，r，尺寸分别为(...,M,M)、(...,M,N)。 “r”：仅返回尺寸为(...,K,N)的r。 “raw”：返回h，tau尺寸分别为(...,N,M)、(...,K,)。 |


#### 返回数据

| 名称 | 类型 | 说明 |
| --- | --- | --- |
| q | ndarray of float or complex | 具有正交列的矩阵。当模式=“完成”时，结果是一个正交/酉矩阵，这取决于a是否为实/复数。在这种情况下，行列式可以是+/\- 1。如果输入数组中的维数大于2，则返回具有上述属性的一组矩阵。 |
| r | ndarray of float or complex | 如果输入数组中的维数大于2，上三角矩阵或一组上三角矩阵。 |
| (h, tau) | ndarrays of np.double or np.cdouble | 数组h包含与r一起生成q的豪斯霍尔德镜射算子。数组tau包含镜射算子的缩放因子。 |


#### 示例

```
>>> import numpy as np
>>> a = np.random.randn(9, 6)
>>> q, r = np.linalg.qr(a)
>>> 
>>> np.allclose(a, np.dot(q,r))
True
>>> 
>>> r2 = np.linalg.qr(a, mode='r')
>>> np.allclose(r, r2)
True
>>> 
>>> a = np.random.normal(size=(3,2,2))
>>> q, r = np.linalg.qr(a)
>>> q.shape
(3, 2, 2)
>>> r.shape
(3, 2, 2)
>>> np.allclose(a, np.matmul(q,r))
True
>>> 
>>> # Ax = b, 若A可分解为A = qr, 则 x = inv(r) * (q.T) * b
>>> 
>>> A = np.array([[0,1], [1,1], [1,1], [2,1]])
>>> A
array([[0, 1],
       [1, 1],
       [1, 1],
       [2, 1]])
>>> b = np.array([1, 0, 2, 1])
>>> q, r = np.linalg.qr(A)
>>> p = np.dot(q.T, b)
>>> 
>>> np.dot(np.linalg.inv(r), p)
array([2.62287285e-16, 1.00000000e+00])
>>>
```
