scipy.linalg.

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, wenn mode='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), wobei K=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))