qr#
- scipy.linalg.qr(a, overwrite_a=False, lwork=None, mode='full', pivoting=False, check_finite=True)[Quelle]#
QR-Zerlegung einer Matrix berechnen.
Berechnet die Zerlegung
A = Q R, 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, wenn overwrite_a auf True gesetzt ist, indem die vorhandene Eingabestruktur wiederverwendet wird, anstatt eine neue zu erstellen.)
- lworkint, optional
Größe des Arbeitsarrays, lwork >= a.shape[1]. Wenn None oder -1, wird eine optimale Größe berechnet.
- mode{‘full’, ‘r’, ‘economic’, ‘raw’}, optional
Bestimmt, welche Informationen zurückgegeben werden sollen: entweder Q und R (‘full’, Standard), nur R (‘r’) oder sowohl Q als auch R, aber in Economy-Größe berechnet (‘economic’, siehe Hinweise). Die letzte Option ‘raw’ (hinzugefügt in SciPy 0.11) bewirkt, dass die Funktion zwei Matrizen (Q, TAU) im internen Format von LAPACK zurückgibt.
- pivotingbool, optional
Ob die Faktorisierung eine Pivotauswahl für eine rangauflösende QR-Zerlegung beinhalten soll. Wenn Pivotauswahl erfolgt, berechnen Sie die Zerlegung
A[:, P] = Q @ Rwie oben, aber wobei P so gewählt wird, dass die Diagonale von R nicht steigend ist. Äquivalent, wenn auch weniger effizient, kann eine explizite P-Matrix durch Permutieren der Zeilen oder Spalten (abhängig von der Seite der Gleichung, auf der sie verwendet werden soll) einer Identitätsmatrix gebildet werden. Siehe Beispiele.- 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:
- Qfloat oder complex ndarray
Mit der Form (M, M) oder (M, K) für
mode='economic'. Nicht zurückgegeben, wennmode='r'. Ersetzt durch Tupel(Q, TAU)wennmode='raw'.- Rfloat oder complex ndarray
Mit der Form (M, N) oder (K, N) für
mode in ['economic', 'raw'].K = min(M, N).- Pint ndarray
Mit der Form (N,) für
pivoting=True. Nicht zurückgegeben, wennpivoting=False.
- Löst aus:
- LinAlgError
Ausgelöst, wenn die Zerlegung fehlschlägt
Hinweise
Dies ist eine Schnittstelle zu den LAPACK-Routinen dgeqrf, zgeqrf, dorgqr, zungqr, dgeqp3 und zgeqp3.
Wenn
mode=economic, haben Q und R die Formen (M, K) und (K, N) anstelle von (M,M) und (M,N), mitK=min(M,N).Beispiele
>>> import numpy as np >>> from scipy import linalg >>> rng = np.random.default_rng() >>> a = rng.standard_normal((9, 6))
>>> q, r = linalg.qr(a) >>> np.allclose(a, np.dot(q, r)) True >>> q.shape, r.shape ((9, 9), (9, 6))
>>> r2 = linalg.qr(a, mode='r') >>> np.allclose(r, r2) True
>>> q3, r3 = linalg.qr(a, mode='economic') >>> q3.shape, r3.shape ((9, 6), (6, 6))
>>> q4, r4, p4 = linalg.qr(a, pivoting=True) >>> d = np.abs(np.diag(r4)) >>> np.all(d[1:] <= d[:-1]) True >>> np.allclose(a[:, p4], np.dot(q4, r4)) True >>> P = np.eye(p4.size)[p4] >>> np.allclose(a, np.dot(q4, r4) @ P) True >>> np.allclose(a @ P.T, np.dot(q4, r4)) True >>> q4.shape, r4.shape, p4.shape ((9, 9), (9, 6), (6,))
>>> q5, r5, p5 = linalg.qr(a, mode='economic', pivoting=True) >>> q5.shape, r5.shape, p5.shape ((9, 6), (6, 6), (6,)) >>> P = np.eye(6)[:, p5] >>> np.allclose(a @ P, np.dot(q5, r5)) True