Saya tahu @
ini untuk dekorator, tapi untuk apa @=
Python? Apakah hanya reservasi untuk beberapa ide masa depan?
Ini hanya salah satu dari banyak pertanyaan saya saat membaca tokenizer.py
.
python
python-3.x
operators
matrix-multiplication
python-3.5
Octavia Togami
sumber
sumber
:=
operator walrus dari Python 3.8, Anda mendapatkan apa yang dikenal sebagai@:=
operator rose berduri. (Atau di Jepang itu dikenal sebagai operator Elvis-walrus.)Jawaban:
Dari yang dokumentasi :
The
@
Operator diperkenalkan dengan Python 3.5.@=
adalah perkalian matriks yang diikuti oleh penugasan, seperti yang Anda harapkan. Mereka memetakan__matmul__
,__rmatmul__
atau__imatmul__
mirip dengan bagaimana+
dan+=
memetakan__add__
,__radd__
atau__iadd__
.Operator dan alasan di baliknya dibahas secara rinci dalam PEP 465 .
sumber
@=
dan@
operator baru diperkenalkan di Python 3.5 melakukan perkalian matriks . Mereka dimaksudkan untuk mengklarifikasi kebingungan yang ada sejauh ini dengan operator*
yang digunakan baik untuk perkalian elemen-bijaksana atau perkalian matriks tergantung pada konvensi yang digunakan dalam perpustakaan / kode tertentu. Akibatnya, di masa depan, operator*
dimaksudkan hanya untuk penggandaan elemen-bijaksana.Sebagaimana dijelaskan dalam PEP0465 , dua operator diperkenalkan:
A @ B
, digunakan sama sepertiA * B
A @= B
, digunakan sama sepertiA *= B
Perkalian Matriks vs Perkalian Elemen-bijaksana
Untuk dengan cepat menyoroti perbedaannya, untuk dua matriks:
Penggandaan elemen-bijaksana akan menghasilkan:
Multiplikasi matriks akan menghasilkan:
Penggunaan di Numpy
Sejauh ini, Numpy menggunakan konvensi berikut:
yang
*
operator (dan operator aritmatika pada umumnya) didefinisikan sebagai operasi elemen-bijaksana pada ndarrays dan sebagai matriks-perkalian pada numpy.matrix jenis.metode / fungsi
dot
digunakan untuk perkalian matriks ndarraysPengenalan
@
operator membuat kode yang melibatkan perkalian matriks lebih mudah dibaca. PEP0465 memberi kita contoh:Jelas, implementasi terakhir jauh lebih mudah dibaca dan ditafsirkan sebagai sebuah persamaan.
sumber
@
telah diterapkan untuklist
, yang tidak terjadi.@
dikaitkan dengannp.matmul
, bukannp.dot
. Keduanya serupa tetapi tidak sama.@ adalah operator baru untuk Penggandaan Matriks yang ditambahkan dalam Python3.5
Referensi: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
Contoh
sumber