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

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