scipy.linalg.

rq#

scipy.linalg.rq(a, overwrite_a=False, lwork=None, mode='full', check_finite=True)[source]#

計算矩陣的 RQ 分解。

計算分解式 A = R Q,其中 Q 是 unitary/orthogonal 且 R 是上三角矩陣。

參數:
a(M, N) array_like

要分解的矩陣

overwrite_abool, optional

是否覆寫 a 中的資料 (可能提升效能)

lworkint, optional

工作陣列大小,lwork >= a.shape[1]。如果為 None 或 -1,則會計算最佳大小。

mode{‘full’, ‘r’, ‘economic’}, optional

決定要返回哪些資訊:Q 和 R 兩者皆返回 ('full',預設)、僅返回 R ('r'),或 Q 和 R 兩者皆返回但以 economy-size 計算 ('economic',請參閱 Notes)。

check_finitebool, optional

是否檢查輸入矩陣僅包含有限數字。停用此選項可能會提高效能,但如果輸入包含無限大或 NaN,則可能會導致問題 (崩潰、非終止)。

返回:
Rfloat 或 complex ndarray

形狀為 (M, N) 或 (M, K),若 mode='economic'K = min(M, N)

Qfloat 或 complex ndarray

形狀為 (N, N) 或 (K, N),若 mode='economic'。若 mode='r' 則不返回。

引發:
LinAlgError

如果分解失敗。

註解

這是 LAPACK 常式 sgerqf、dgerqf、cgerqf、zgerqf、sorgrq、dorgrq、cungrq 和 zungrq 的介面。

mode=economic,則 Q 和 R 的形狀為 (K, N) 和 (M, K),而非 (N,N) 和 (M,N),其中 K=min(M,N)。

範例

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> a = rng.standard_normal((6, 9))
>>> r, q = linalg.rq(a)
>>> np.allclose(a, r @ q)
True
>>> r.shape, q.shape
((6, 9), (9, 9))
>>> r2 = linalg.rq(a, mode='r')
>>> np.allclose(r, r2)
True
>>> r3, q3 = linalg.rq(a, mode='economic')
>>> r3.shape, q3.shape
((6, 6), (6, 9))