qr_multiply#
- scipy.linalg.qr_multiply(a, c, mode='right', pivoting=False, conjugate=False, overwrite_a=False, overwrite_c=False)[Quelle]#
Berechnet die QR-Zerlegung und multipliziert Q mit einer Matrix.
Berechnet die Zerlegung
A = Q R, wobei Q unitär/orthogonal und R obere Dreiecksmatrix ist. Multipliziert Q mit einem Vektor oder einer Matrix c.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
Eingabearray
- carray_like
Eingabearray, das mit
qmultipliziert werden soll.- mode{‘left’, ‘right’}, optional
Q @ cwird zurückgegeben, wenn mode 'left' ist,c @ Qwird zurückgegeben, wenn mode 'right' ist. Die Form von c muss für die Matrixmultiplikationen geeignet sein. Wenn mode 'left' ist, mussmin(a.shape) == c.shape[0]sein. Wenn mode 'right' ist, mussa.shape[0] == c.shape[1]sein.- pivotingbool, optional
Gibt an, ob die Faktorisierung Pivoting für eine rangsensitive QR-Zerlegung beinhalten soll. Siehe die Dokumentation von qr.
- conjugatebool, optional
Gibt an, ob Q komplex konjugiert werden soll. Dies kann schneller sein als explizite Konjugation.
- overwrite_abool, optional
Gibt an, ob die Daten in a überschrieben werden (kann die Leistung verbessern).
- overwrite_cbool, optional
Gibt an, ob die Daten in c überschrieben werden (kann die Leistung verbessern). Wenn dies verwendet wird, muss c groß genug sein, um das Ergebnis aufzunehmen, d.h.
c.shape[0]=a.shape[0], wenn mode 'left' ist.
- Rückgabe:
- CQndarray
Das Produkt von
Qundc.- R(K, N), ndarray
R-Array der resultierenden QR-Faktorisierung, wobei
K = min(M, N).- P(N,) ndarray
Integer-Pivot-Array. Nur zurückgegeben, wenn
pivoting=True.
- Löst aus:
- LinAlgError
Ausgelöst, wenn die QR-Zerlegung fehlschlägt.
Hinweise
Dies ist eine Schnittstelle zu den LAPACK-Routinen
?GEQRF,?ORMQR,?UNMQRund?GEQP3.Hinzugefügt in Version 0.11.0.
Beispiele
>>> import numpy as np >>> from scipy.linalg import qr_multiply, qr >>> A = np.array([[1, 3, 3], [2, 3, 2], [2, 3, 3], [1, 3, 2]]) >>> qc, r1, piv1 = qr_multiply(A, 2*np.eye(4), pivoting=1) >>> qc array([[-1., 1., -1.], [-1., -1., 1.], [-1., -1., -1.], [-1., 1., 1.]]) >>> r1 array([[-6., -3., -5. ], [ 0., -1., -1.11022302e-16], [ 0., 0., -1. ]]) >>> piv1 array([1, 0, 2], dtype=int32) >>> q2, r2, piv2 = qr(A, mode='economic', pivoting=1) >>> np.allclose(2*q2 - qc, np.zeros((4, 3))) True