LinearOperator#
- class scipy.sparse.linalg.LinearOperator(*args, **kwargs)[Quelle]#
Gemeinsame Schnittstelle zur Durchführung von Matrix-Vektor-Produkten
Viele iterative Methoden (z. B.
cg,gmres) müssen die einzelnen Einträge einer Matrix nicht kennen, um ein lineares SystemA@x = bzu lösen. Solche Löser erfordern nur die Berechnung von Matrix-Vektor-Produkten,A@v, wobeivein dichter Vektor ist. Diese Klasse dient als abstrakte Schnittstelle zwischen iterativen Lösern und matrixähnlichen Objekten.Um einen konkreten
LinearOperatorzu erstellen, übergeben Sie entweder geeignete aufrufbare Funktionen an den Konstruktor dieser Klasse oder leiten Sie davon ab.Eine abgeleitete Klasse muss entweder eine der Methoden
_matvecund_matmatsowie die Attribute/Eigenschaftenshape(ganzzahliges Paar) unddtype(kann None sein) implementieren. Sie kann die Methode__init__dieser Klasse aufrufen, um diese Attribute validieren zu lassen. Die Implementierung von_matvecimplementiert automatisch_matmat(mit einem naiven Algorithmus) und umgekehrt.Optional kann eine abgeleitete Klasse
_rmatvecoder_adjointimplementieren, um die hermitesche Adjungierte (konjugierte Transponierte) zu implementieren. Wie bei_matvecund_matmatimplementiert die Implementierung von entweder_rmatvecoder_adjointdie jeweils andere automatisch. Die Implementierung von_adjointist vorzuziehen;_rmatvecist hauptsächlich zur Abwärtskompatibilität vorhanden.- Parameter:
- shapetuple
Matrixdimensionen
(M, N).- matveccallable f(v)
Gibt
A @ vzurück.- rmatveccallable f(v)
Gibt
A^H @ vzurück, wobeiA^Hdie konjugierte Transponierte vonAist.- matmatcallable f(V)
Gibt
A @ Vzurück, wobeiVeine dichte Matrix mit den Dimensionen(N, K)ist.- dtypedtype
Datentyp der Matrix.
- rmatmatcallable f(V)
Gibt
A^H @ Vzurück, wobeiVeine dichte Matrix mit den Dimensionen(M, K)ist.
- Attribute:
- argstuple
Für lineare Operatoren, die Produkte usw. anderer linearer Operatoren beschreiben, die Operanden der binären Operation.
- ndimint
Anzahl der Dimensionen (dies ist immer 2)
Methoden
__call__(x)Ruft sich selbst als Funktion auf.
adjoint()Hermitesche Adjungierte.
dot(x)Matrix-Matrix- oder Matrix-Vektor-Multiplikation.
matmat(X)Matrix-Matrix-Multiplikation.
matvec(x)Matrix-Vektor-Multiplikation.
rmatmat(X)Adjungierte Matrix-Matrix-Multiplikation.
rmatvec(x)Adjungierte Matrix-Vektor-Multiplikation.
Transponiert diesen linearen Operator.
__mul__
Siehe auch
aslinearoperatorLinearOperators erstellen
Hinweise
Die benutzerdefinierte
matvecFunktion muss den Fall, dassvdie Form(N,)hat, sowie den Fall(N,1)korrekt behandeln. Die Form des Rückgabetyps wird intern vonLinearOperatorgehandhabt.Es wird dringend empfohlen, den dtype explizit anzugeben, andernfalls wird er automatisch bestimmt, indem eine einzige matvec-Anwendung auf einen
int8Nullvektor mit dem erweiterten dtype des Ergebnisses verwendet wird. Python-Integer könnten schwierig automatisch in Numpy-Integer in der Definition vonmatvecumgewandelt werden, so dass die Bestimmung ungenau sein kann. Es wird davon ausgegangen, dassmatmat,rmatvecundrmatmatbei einemint8-Eingang denselben Ergebnistyp wiematvecergeben würden.LinearOperator-Instanzen können auch miteinander multipliziert, addiert und potenzieren, alles verzögert: Das Ergebnis dieser Operationen ist immer ein neuer, zusammengesetzter LinearOperator, der lineare Operationen an die ursprünglichen Operatoren delegiert und die Ergebnisse kombiniert.
Weitere Details zur Ableitung einer Klasse von einem LinearOperator und mehrere Beispiele für konkrete LinearOperator-Instanzen finden Sie im externen Projekt PyLops.
Beispiele
>>> import numpy as np >>> from scipy.sparse.linalg import LinearOperator >>> def mv(v): ... return np.array([2*v[0], 3*v[1]]) ... >>> A = LinearOperator((2,2), matvec=mv) >>> A <2x2 _CustomLinearOperator with dtype=int8> >>> A.matvec(np.ones(2)) array([ 2., 3.]) >>> A @ np.ones(2) array([ 2., 3.])