scipy.linalg.rq

scipy.linalg.rq(a, overwrite_a=False, lwork=None, mode='full', check_finite=True)[源代码]

计算矩阵的RQ分解。

计算分解 A = R Q 其中Q是酉/正交的,R是上三角形。

参数
a(M,N)类数组

待分解矩阵

overwrite_a布尔值,可选

中的数据是否被覆盖(可能会提高性能)

lwork整型,可选

工作数组大小,lwork>=a.form [1] 。如果没有或-1,则计算最佳大小。

mode{‘完整’,‘r’,‘经济’},可选

确定要返回的信息:既可以是Q和R(‘full’,默认值),也可以是只返回R(‘r’),或者同时返回Q和R,但要按经济规模计算(‘Economy’,请参阅注释)。

check_finite布尔值,可选

是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。

退货
R浮动或复数ndarray

形状为(M,N)或(M,K)的 mode='economic'K = min(M, N)

Q浮动或复数ndarray

形状为(N,N)或(K,N)的 mode='economic' 。如果出现以下情况,则不返回 mode='r'

加薪
LinAlgError

如果分解失败。

注意事项

这是LAPACK例程sgerqf、dgerqf、cgerqf、zgerqf、sorgrq、dorgrq、cungrq和zungrq的接口。

如果 mode=economic ,Q和R的形状不是(N,N)和(M,N),而是(K,N)和(M,K),其中 K=min(M,N)

示例

>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> a = rng.standard_normal((6, 9))
>>> r, q = linalg.rq(a)
>>> np.allclose(a, r @ q)
True
>>> r.shape, q.shape
((6, 9), (9, 9))
>>> r2 = linalg.rq(a, mode='r')
>>> np.allclose(r, r2)
True
>>> r3, q3 = linalg.rq(a, mode='economic')
>>> r3.shape, q3.shape
((6, 6), (6, 9))