Matematikte, uyuşuk noktanın daha mantıklı olduğunu düşünüyorum.
nokta (a, b) _ {i, j, k, a, b, c} =
a ve b vektör olduğunda iç çarpımı veya a ve b matris olduğunda matris çarpımını verdiğinden
Numpy'de matmul işlemine gelince , nokta sonucu bölümlerinden oluşur ve şu şekilde tanımlanabilir:
> matmul (a, b) _ {i, j, k, c} =
Böylece, matmul (a, b) 'nin küçük bir şekle sahip, daha az bellek tüketen ve uygulamalarda daha anlamlı olan bir dizi döndürdüğünü görebilirsiniz . Özellikle yayıncılık ile birleştirerek ,
matmul (a, b) _ {i, j, k, l} =
Örneğin.
Yukarıdaki iki tanımdan, bu iki işlemi kullanmak için gereksinimleri görebilirsiniz. A.shape = (s1, s2, s3, s4) ve b.shape = (t1, t2, t3, t4) olduğunu varsayalım
Kullanmak için (a, b) nokta İhtiyacınız
- t3 = s4 ;
Kullanmak için matmul (a, b) ihtiyacınız
- t3 = s4
- t2 = s2 veya t2 ve s2'den biri 1
- t1 = s1 veya t1 ve s1'den biri 1
Kendinizi ikna etmek için aşağıdaki kod parçasını kullanın.
Kod örneği
import numpy as np
for it in xrange(10000):
a = np.random.rand(5,6,2,4)
b = np.random.rand(6,4,3)
c = np.matmul(a,b)
d = np.dot(a,b)
#print 'c shape: ', c.shape,'d shape:', d.shape
for i in range(5):
for j in range(6):
for k in range(2):
for l in range(3):
if not c[i,j,k,l] == d[i,j,k,j,l]:
print it,i,j,k,l,c[i,j,k,l]==d[i,j,k,j,l] #you will not see them