scipy.sparse.linalg.

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 System A@x = b zu lösen. Solche Löser erfordern nur die Berechnung von Matrix-Vektor-Produkten, A@v, wobei v ein dichter Vektor ist. Diese Klasse dient als abstrakte Schnittstelle zwischen iterativen Lösern und matrixähnlichen Objekten.

Um einen konkreten LinearOperator zu 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 _matvec und _matmat sowie die Attribute/Eigenschaften shape (ganzzahliges Paar) und dtype (kann None sein) implementieren. Sie kann die Methode __init__ dieser Klasse aufrufen, um diese Attribute validieren zu lassen. Die Implementierung von _matvec implementiert automatisch _matmat (mit einem naiven Algorithmus) und umgekehrt.

Optional kann eine abgeleitete Klasse _rmatvec oder _adjoint implementieren, um die hermitesche Adjungierte (konjugierte Transponierte) zu implementieren. Wie bei _matvec und _matmat implementiert die Implementierung von entweder _rmatvec oder _adjoint die jeweils andere automatisch. Die Implementierung von _adjoint ist vorzuziehen; _rmatvec ist hauptsächlich zur Abwärtskompatibilität vorhanden.

Parameter:
shapetuple

Matrixdimensionen (M, N).

matveccallable f(v)

Gibt A @ v zurück.

rmatveccallable f(v)

Gibt A^H @ v zurück, wobei A^H die konjugierte Transponierte von A ist.

matmatcallable f(V)

Gibt A @ V zurück, wobei V eine dichte Matrix mit den Dimensionen (N, K) ist.

dtypedtype

Datentyp der Matrix.

rmatmatcallable f(V)

Gibt A^H @ V zurück, wobei V eine 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.

transpose()

Transponiert diesen linearen Operator.

__mul__

Siehe auch

aslinearoperator

LinearOperators erstellen

Hinweise

Die benutzerdefinierte matvec Funktion muss den Fall, dass v die Form (N,) hat, sowie den Fall (N,1) korrekt behandeln. Die Form des Rückgabetyps wird intern von LinearOperator gehandhabt.

Es wird dringend empfohlen, den dtype explizit anzugeben, andernfalls wird er automatisch bestimmt, indem eine einzige matvec-Anwendung auf einen int8 Nullvektor mit dem erweiterten dtype des Ergebnisses verwendet wird. Python-Integer könnten schwierig automatisch in Numpy-Integer in der Definition von matvec umgewandelt werden, so dass die Bestimmung ungenau sein kann. Es wird davon ausgegangen, dass matmat, rmatvec und rmatmat bei einem int8-Eingang denselben Ergebnistyp wie matvec ergeben 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.])