scipy.linalg.qr_multiply

scipy.linalg.qr_multiply(a, c, mode='right', pivoting=False, conjugate=False, overwrite_a=False, overwrite_c=False)[源代码]

计算QR分解并将Q与矩阵相乘。

计算分解 A = Q R 其中Q是酉/正交的,R是上三角形。将q与向量或矩阵c相乘。

参数
a(M,N),类似数组

输入数组

carray_like

要乘以的输入数组 q

mode{‘左’,‘右’},可选

Q @ c 如果mode为“Left”,则返回 c @ Q 如果mode为“right”,则返回。C的形状必须适合于矩阵乘法,如果模式是“左”, min(a.shape) == c.shape[0] ,如果模式为“正确”, a.shape[0] == c.shape[1]

pivoting布尔值,可选

因子分解是否应该包括显示等级的QR分解的旋转,请参阅QR的文档。

conjugate布尔值,可选

Q是否应该是复共轭的。这可能比显式共轭更快。

overwrite_a布尔值,可选

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

overwrite_c布尔值,可选

c中的数据是否被覆盖(可能会提高性能)。如果使用此参数,则c必须足够大才能保存结果,即 c.shape[0] = a.shape[0] 如果模式为“左”。

退货
CQndarray

的产品 Qc

R(K,N),ndarray

产生的QR因子分解的R数组,其中 K = min(M, N)

P(n,)ndarray

整数透视数组。仅在以下情况下返回 pivoting=True

加薪
LinAlgError

QR分解失败时引发。

注意事项

这是LAPACK例程的接口 ?GEQRF?ORMQR?UNMQR ,以及 ?GEQP3

0.11.0 新版功能.

示例

>>> from scipy.linalg import qr_multiply, qr
>>> A = np.array([[1, 3, 3], [2, 3, 2], [2, 3, 3], [1, 3, 2]])
>>> qc, r1, piv1 = qr_multiply(A, 2*np.eye(4), pivoting=1)
>>> qc
array([[-1.,  1., -1.],
       [-1., -1.,  1.],
       [-1., -1., -1.],
       [-1.,  1.,  1.]])
>>> r1
array([[-6., -3., -5.            ],
       [ 0., -1., -1.11022302e-16],
       [ 0.,  0., -1.            ]])
>>> piv1
array([1, 0, 2], dtype=int32)
>>> q2, r2, piv2 = qr(A, mode='economic', pivoting=1)
>>> np.allclose(2*q2 - qc, np.zeros((4, 3)))
True