scipy.linalg.

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 @ R wie 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, wenn mode='r'. Ersetzt durch Tupel (Q, TAU) wenn mode='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, wenn pivoting=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), mit K=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