scipy.linalg.

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 q multipliziert werden soll.

mode{‘left’, ‘right’}, optional

Q @ c wird zurückgegeben, wenn mode 'left' ist, c @ Q wird zurückgegeben, wenn mode 'right' ist. Die Form von c muss für die Matrixmultiplikationen geeignet sein. Wenn mode 'left' ist, muss min(a.shape) == c.shape[0] sein. Wenn mode 'right' ist, muss a.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 Q und c.

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, ?UNMQR und ?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