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))