scipy.linalg.qr¶
- scipy.linalg.qr(a, overwrite_a=False, lwork=None, mode='full', pivoting=False, check_finite=True)[源代码]¶
计算矩阵的QR分解。
计算分解
A = Q R
其中Q是酉/正交的,R是上三角形。- 参数
- a(M,N)类数组
待分解矩阵
- overwrite_a布尔值,可选
数据是否在 a 被覆盖(在以下情况下可能会提高性能 overwrite_a 通过重用现有输入数据结构而不是创建新数据结构,将其设置为True。)
- lwork整型,可选
工作数组大小,lwork>=a.form [1] 。如果没有或-1,则计算最佳大小。
- mode{‘完整’,‘r’,‘经济’,‘原始’},可选
确定要返回的信息:既可以是Q和R(‘full’,默认值),也可以是只返回R(‘r’),或者同时返回Q和R,但要按经济规模计算(‘Economy’,请参阅注释)。最后一个选项‘raw’(添加到SciPy 0.11中)使函数以LAPACK使用的内部格式返回两个矩阵(Q,TAU)。
- pivoting布尔值,可选
因子分解是否应该包括显示秩的QR分解的旋转。如果旋转,则计算分解
A P = Q R
如上所述,但其中P的选择使得R的对角线是非递增的。- check_finite布尔值,可选
是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。
- 退货
- Q浮动或复数ndarray
形状为(M,M),或形状为(M,K
mode='economic'
。如果出现以下情况,则不返回mode='r'
。- R浮动或复数ndarray
形状为(M,N)的,或形状为(K,N)的
mode='economic'
。K = min(M, N)
。- P集成ndarray
形状为(N,)的
pivoting=True
。如果出现以下情况,则不返回pivoting=False
。
- 加薪
- LinAlgError
如果分解失败,则引发
注意事项
这是LAPACK例程dgeqrf、zgeqrf、dorgqr、zungqr、dgeqp3和zgeqp3的接口。
如果
mode=economic
,Q和R的形状为(M,K)和(K,N),而不是(M,M)和(M,N),其中K=min(M,N)
。示例
>>> from scipy import linalg >>> rng = np.random.default_rng() >>> a = rng.standard_normal((9, 6))
>>> q, r = linalg.qr(a) >>> np.allclose(a, np.dot(q, r)) True >>> q.shape, r.shape ((9, 9), (9, 6))
>>> r2 = linalg.qr(a, mode='r') >>> np.allclose(r, r2) True
>>> q3, r3 = linalg.qr(a, mode='economic') >>> q3.shape, r3.shape ((9, 6), (6, 6))
>>> q4, r4, p4 = linalg.qr(a, pivoting=True) >>> d = np.abs(np.diag(r4)) >>> np.all(d[1:] <= d[:-1]) True >>> np.allclose(a[:, p4], np.dot(q4, r4)) True >>> q4.shape, r4.shape, p4.shape ((9, 9), (9, 6), (6,))
>>> q5, r5, p5 = linalg.qr(a, mode='economic', pivoting=True) >>> q5.shape, r5.shape, p5.shape ((9, 6), (6, 6), (6,))