rq#
- scipy.linalg.rq(a, overwrite_a=False, lwork=None, mode='full', check_finite=True)[Quelle]#
Berechnet die RQ-Zerlegung einer Matrix.
Berechnet die Zerlegung
A = R Q, wobei Q unitär/orthogonal und R obere Dreiecksmatrix ist.Die Dokumentation wurde unter der Annahme verfasst, dass die Array-Argumente bestimmte „Kern“-Formen haben. Array-Argumente dieser Funktion können jedoch zusätzliche „Batch“-Dimensionen vorangestellt haben. In diesem Fall wird das Array als Stapel von niedrigdimensionalen Schnitten behandelt; siehe Gestapelte lineare Operationen für Details.
- Parameter:
- a(M, N) array_like
Zu zerlegende Matrix
- overwrite_abool, optional
Ob die Daten in a überschrieben werden (kann die Leistung verbessern)
- lworkint, optional
Größe des Arbeitsarrays, lwork >= a.shape[1]. Wenn None oder -1, wird eine optimale Größe berechnet.
- mode{‘full’, ‘r’, ‘economic’}, optional
Bestimmt, welche Informationen zurückgegeben werden sollen: entweder sowohl Q als auch R (‘full’, Standard), nur R (‘r’) oder sowohl Q als auch R, aber in Economy-Größe berechnet (‘economic’, siehe Hinweise).
- check_finitebool, optional
Ob überprüft werden soll, ob die Eingabematrix nur endliche Zahlen enthält. Das Deaktivieren kann zu einer Leistungssteigerung führen, kann aber zu Problemen (Abstürze, Nichtterminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten.
- Rückgabe:
- Rfloat oder complex ndarray
Von der Form (M, N) oder (M, K) für
mode='economic'.K = min(M, N).- Qfloat oder complex ndarray
Von der Form (N, N) oder (K, N) für
mode='economic'. Wird nicht zurückgegeben, wennmode='r'.
- Löst aus:
- LinAlgError
Wenn die Zerlegung fehlschlägt.
Hinweise
Dies ist eine Schnittstelle zu den LAPACK-Routinen sgerqf, dgerqf, cgerqf, zgerqf, sorgrq, dorgrq, cungrq und zungrq.
Wenn
mode=economic, sind die Formen von Q und R (K, N) und (M, K) anstelle von (N,N) und (M,N), wobeiK=min(M,N).Beispiele
>>> 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))