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), array_like
输入数组
- carray_like
要与
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]
。- pivotingbool, 可选
是否分解应包括用于秩显式 QR 分解的旋转,请参阅 qr 的文档。
- conjugatebool, 可选
Q 是否应该进行复共轭。 这可能比显式共轭更快。
- overwrite_abool, 可选
是否覆盖 a 中的数据(可能提高性能)
- overwrite_cbool, 可选
是否覆盖 c 中的数据(可能提高性能)。 如果使用此选项,则 c 必须足够大以保留结果,即如果 mode 为 ‘left’,则
c.shape[0]
=a.shape[0]
。
- 返回:
- CQndarray
Q
和c
的乘积。- 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