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,))