scipy.linalg.

qr_multiply#

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

计算 QR 分解并将 Q 乘以一个矩阵。

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

本文档假定数组参数具有指定的“核心”形状。但是,此函数的数组参数可能在核心形状之前附加了额外的“批处理”维度。在这种情况下,数组被视为一系列低维切片;有关详细信息,请参阅批处理线性操作

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

输入数组

c类数组

要与 q 相乘的输入数组。

mode{‘left’, ‘right’},可选

如果 mode 为 ‘left’,则返回 Q @ c;如果 mode 为 ‘right’,则返回 c @ Q。c 的形状必须适合矩阵乘法:如果 mode 为 ‘left’,则 min(a.shape) == c.shape[0];如果 mode 为 ‘right’,则 a.shape[0] == c.shape[1]

pivoting布尔值,可选

分解是否应包含用于秩揭示 QR 分解的枢轴,请参阅 qr 的文档。

conjugate布尔值,可选

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

overwrite_a布尔值,可选

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

overwrite_c布尔值,可选

c 中的数据是否被覆盖(可能提高性能)。如果使用此选项,c 必须足够大以容纳结果,即如果 mode 为 ‘left’,则 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 版本新增。

示例

>>> import numpy as np
>>> 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