Ich weiß, @
ist für Dekorateure, aber wofür ist @=
in Python? Ist es nur ein Vorbehalt für eine zukünftige Idee?
Dies ist nur eine meiner vielen Fragen beim Lesen tokenizer.py
.
python
python-3.x
operators
matrix-multiplication
python-3.5
Octavia Togami
quelle
quelle
:=
Walross-Operator von Python 3.8 erhalten Sie den sogenannten@:=
Dornrosen-Operator. (Oder in Japan ist es als Elvis-Walross-Betreiber bekannt.)Antworten:
Aus der Dokumentation :
Der
@
Operator wurde in Python 3.5 eingeführt.@=
ist die Matrixmultiplikation, gefolgt von der Zuweisung, wie Sie es erwarten würden. Sie bilden auf__matmul__
,__rmatmul__
oder__imatmul__
ähnlich, wie+
und+=
Karte auf__add__
,__radd__
oder__iadd__
.Der Betreiber und die Gründe dafür werden in PEP 465 ausführlich erörtert .
quelle
@=
und@
sind neue Operatoren, die in Python 3.5 eingeführt wurden und eine Matrixmultiplikation durchführen . Sie sollen die bisherige Verwechslung mit dem Operator verdeutlichen, der*
je nach der in dieser bestimmten Bibliothek / diesem Code verwendeten Konvention entweder für die elementweise Multiplikation oder die Matrixmultiplikation verwendet wurde. Infolgedessen soll der Operator in Zukunft*
nur noch für die elementweise Multiplikation verwendet werden.Wie in PEP0465 erläutert , wurden zwei Operatoren eingeführt:
A @ B
, der ähnlich wie verwendet wirdA * B
A @= B
, die ähnlich wie verwendet wirdA *= B
Matrixmultiplikation vs. elementweise Multiplikation
Um den Unterschied für zwei Matrizen schnell hervorzuheben:
Die elementweise Multiplikation ergibt:
Die Matrixmultiplikation ergibt:
Verwendung in Numpy
Bisher verwendete Numpy die folgende Konvention:
Der
*
Operator (und die arithmetischen Operatoren im Allgemeinen) wurden als elementweise Operationen auf ndarrays und als Matrixmultiplikation auf dem Typ numpy.matrix definiert .Methode / Funktion
dot
wurde für die Matrixmultiplikation von Ndarrays verwendetDie Einführung des
@
Operators erleichtert das Lesen des Codes mit Matrixmultiplikationen erheblich. PEP0465 gibt uns ein Beispiel:Es ist klar, dass die letzte Implementierung viel einfacher zu lesen und als Gleichung zu interpretieren ist.
quelle
@
dies implementiert wurdelist
, was nicht der Fall ist.@
ist verbunden mitnp.matmul
, nichtnp.dot
. Die beiden sind ähnlich, aber nicht gleich.@ ist der neue Operator für die Matrixmultiplikation, der in Python3.5 hinzugefügt wurde
Referenz: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
Beispiel
quelle