In matematica, penso che il punto in numpy abbia più senso
punto (a, b) _ {i, j, k, a, b, c} =
poiché fornisce il prodotto scalare quando aeb sono vettori, o la moltiplicazione di matrici quando aeb sono matrici
Per quanto riguarda l' operazione matmul in numpy, consiste di parti del risultato del punto e può essere definita come
> matmul (a, b) _ {i, j, k, c} =
Quindi, puoi vedere che matmul (a, b) restituisce un array con una forma piccola, che ha un consumo di memoria inferiore e ha più senso nelle applicazioni. In particolare, combinando con la trasmissione , puoi ottenere
matmul (a, b) _ {i, j, k, l} =
per esempio.
Dalle due definizioni precedenti, puoi vedere i requisiti per utilizzare queste due operazioni. Supponiamo a.shape = (s1, s2, s3, s4) e b.shape = (t1, t2, t3, t4)
Per usare il punto (a, b) è necessario
- t3 = s4 ;
Per usare matmul (a, b) è necessario
- t3 = s4
- t2 = s2 o uno tra t2 e s2 è 1
- t1 = s1 , o uno tra t1 e s1 è 1
Usa il seguente pezzo di codice per convincerti.
Esempio di codice
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