@=
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:
- Operator biner baru
A @ B
, digunakan sama sepertiA * B
- Versi di tempat
A @= B
, digunakan sama sepertiA *= B
Perkalian Matriks vs Perkalian Elemen-bijaksana
Untuk dengan cepat menyoroti perbedaannya, untuk dua matriks:
A = [[1, 2], B = [[11, 12],
[3, 4]] [13, 14]]
Penggandaan elemen-bijaksana akan menghasilkan:
A * B = [[1 * 11, 2 * 12],
[3 * 13, 4 * 14]]
Multiplikasi matriks akan menghasilkan:
A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14],
[3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]
Penggunaan di Numpy
Sejauh ini, Numpy menggunakan konvensi berikut:
Pengenalan @
operator membuat kode yang melibatkan perkalian matriks lebih mudah dibaca. PEP0465 memberi kita contoh:
# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))
# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)
# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
Jelas, implementasi terakhir jauh lebih mudah dibaca dan ditafsirkan sebagai sebuah persamaan.