Eu sei que @
é para decoradores, mas o que é @=
para Python? É apenas reserva para alguma idéia futura?
Esta é apenas uma das minhas muitas perguntas durante a leitura tokenizer.py
.
python
python-3.x
operators
matrix-multiplication
python-3.5
Octavia Togami
fonte
fonte
:=
operador de morsa do Python 3.8, você obtém o que é conhecido como o@:=
operador de rosa espinhosa. (Ou no Japão é conhecido como o operador Elvis-walrus.)Respostas:
A partir da documentação :
O
@
operador foi introduzido no Python 3.5.@=
é a multiplicação da matriz seguida pela atribuição, como seria de esperar. Eles mapeiam para__matmul__
,__rmatmul__
ou__imatmul__
similares a como+
e+=
mapeiam para__add__
,__radd__
ou__iadd__
.O operador e a lógica por trás dele são discutidos em detalhes no PEP 465 .
fonte
@=
e@
são novos operadores introduzidos no Python 3.5 executando a multiplicação de matrizes . Eles pretendem esclarecer a confusão que existia até agora com o operador*
que foi usado para multiplicação por elementos ou por matriz, dependendo da convenção empregada nessa biblioteca / código específico. Como resultado, no futuro, o operador*
deve ser usado apenas para multiplicação por elementos.Conforme explicado no PEP0465 , dois operadores foram introduzidos:
A @ B
, usado da mesma forma queA * B
A @= B
, usada da mesma forma queA *= B
Multiplicação de matrizes vs Multiplicação por elementos
Para destacar rapidamente a diferença, para duas matrizes:
A multiplicação por elementos produzirá:
A multiplicação de matrizes produzirá:
Uso em Numpy
Até agora, a Numpy usou a seguinte convenção:
o
*
operador (e operadores aritméticos em geral) foram definidos como operações entre elementos em ndarrays e como multiplicação de matrizes no tipo numpy.matrix .método / função
dot
foi utilizado para multiplicar a matriz de ndarraysA introdução do
@
operador facilita a leitura do código que envolve multiplicações de matrizes. PEP0465 nos dá um exemplo:Claramente, a última implementação é muito mais fácil de ler e interpretar como uma equação.
fonte
@
isso foi implementadolist
, o que não é o caso.@
está associado anp.matmul
, nãonp.dot
. Os dois são semelhantes, mas não são os mesmos.@ é o novo operador para Multiplicação de Matrizes adicionado no Python3.5
Referência: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
Exemplo
fonte