@=
ve @
Python tanıtılan yeni operatörleri 3.5 gerçekleştiren matris çarpımı . Bunlar, *
o kütüphane / kodda kullanılan kurala bağlı olarak, ya eleman bazında çarpma ya da matris çarpma için kullanılan operatör ile şimdiye kadar var olan karışıklığı açıklığa kavuşturmak içindir . Sonuç olarak, gelecekte, operatörün *
sadece eleman-bazlı çarpma için kullanılması amaçlanmıştır.
PEP0465'te açıklandığı gibi , iki operatör tanıtıldı:
A @ B
Benzer şekilde kullanılan yeni bir ikili operatörA * B
A @= B
Aynı şekilde kullanılan yerinde bir sürümA *= B
Matris Çarpma ve Eleman Bilge Çarpma
İki matris için farkı hızla vurgulamak için:
A = [[1, 2], B = [[11, 12],
[3, 4]] [13, 14]]
Eleman-bazlı çarpma şunları sağlayacaktır:
A * B = [[1 * 11, 2 * 12],
[3 * 13, 4 * 14]]
Matris çarpımı şu sonuçları verecektir:
A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14],
[3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]
Numpy'de Kullanım
Şimdiye kadar Numpy aşağıdaki sözleşmeyi kullandı:
@
Operatörün tanıtımı, matris çarpımlarını içeren kodun okunmasını çok daha kolay hale getirir. PEP0465 bize bir örnek veriyor:
# 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)
Açıkçası, son uygulamanın bir denklem olarak okunması ve yorumlanması çok daha kolaydır.