je connais @
c'est pour les décorateurs, mais à quoi sert @=
Python? Est-ce juste une réservation pour une idée future?
Ce n'est qu'une de mes nombreuses questions en lisant tokenizer.py
.
python
python-3.x
operators
matrix-multiplication
python-3.5
Octavia Togami
la source
la source
:=
opérateur morse de Python 3.8, vous obtenez ce que l'on appelle l'@:=
opérateur rose épineuse. (Ou au Japon, il est connu sous le nom d'opérateur Elvis-morse.)Réponses:
De la documentation :
L'
@
opérateur a été introduit dans Python 3.5.@=
est la multiplication matricielle suivie de l'affectation, comme vous vous en doutez. Ils correspondent à__matmul__
,__rmatmul__
ou__imatmul__
similaires à comment+
et+=
correspondent à__add__
,__radd__
ou__iadd__
.L'opérateur et les raisons qui le sous-tendent sont discutés en détail dans la PEP 465 .
la source
@=
et@
sont de nouveaux opérateurs introduits dans Python 3.5 effectuant une multiplication matricielle . Ils visent à clarifier la confusion qui existait jusqu'à présent avec l'opérateur*
qui était utilisé soit pour la multiplication élément par élément, soit pour la multiplication matricielle en fonction de la convention employée dans cette bibliothèque / code particulier. En conséquence, à l'avenir, l'opérateur*
est destiné à être utilisé uniquement pour la multiplication élément par élément.Comme expliqué dans PEP0465 , deux opérateurs ont été introduits:
A @ B
, utilisé de la même manière queA * B
A @= B
, utilisée de la même manière queA *= B
Multiplication matricielle vs multiplication par élément
Pour mettre rapidement en évidence la différence, pour deux matrices:
La multiplication par élément donnera:
La multiplication matricielle donnera:
Utilisation dans Numpy
Jusqu'à présent, Numpy a utilisé la convention suivante:
l'
*
opérateur (et les opérateurs arithmétiques en général) ont été définis comme des opérations élément par élément sur les ndarrays et comme une multiplication matricielle sur le type numpy.matrix .méthode / fonction a
dot
été utilisée pour la multiplication matricielle des ndarraysL'introduction de l'
@
opérateur rend le code impliquant des multiplications matricielles beaucoup plus facile à lire. PEP0465 nous donne un exemple:De toute évidence, la dernière implémentation est beaucoup plus facile à lire et à interpréter comme une équation.
la source
@
a été mis en œuvre pourlist
, ce qui n'est pas le cas.@
est associé ànp.matmul
, nonnp.dot
. Les deux sont similaires mais pas identiques.@ est le nouvel opérateur pour Matrix Multiplication ajouté dans Python3.5
Référence: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
Exemple
la source