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), 類陣列
輸入陣列
- 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]
。- 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