En mathématiques, je pense que le point dans numpy a plus de sens
point (a, b) _ {i, j, k, a, b, c} =
puisqu'elle donne le produit scalaire lorsque a et b sont des vecteurs, ou la multiplication matricielle lorsque a et b sont des matrices
Quant à l' opération matmul dans numpy, elle se compose de parties de résultat de point et peut être définie comme
> matmul (a, b) _ {i, j, k, c} =
Ainsi, vous pouvez voir que matmul (a, b) renvoie un tableau avec une petite forme, qui consomme moins de mémoire et qui a plus de sens dans les applications. En particulier, en combinant avec la diffusion , vous pouvez obtenir
matmul (a, b) _ {i, j, k, l} =
par exemple.
À partir des deux définitions ci-dessus, vous pouvez voir les conditions requises pour utiliser ces deux opérations. Supposons que a.shape = (s1, s2, s3, s4) et b.shape = (t1, t2, t3, t4)
Pour utiliser le point (a, b), vous avez besoin
- t3 = s4 ;
Pour utiliser matmul (a, b), vous avez besoin
- t3 = s4
- t2 = s2 , ou l'un de t2 et s2 est 1
- t1 = s1 , ou l'un de t1 et s1 est 1
Utilisez le morceau de code suivant pour vous convaincre.
Exemple de code
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