In der Mathematik halte ich den Punkt in numpy für sinnvoller
Punkt (a, b) _ {i, j, k, a, b, c} =
da es das Punktprodukt gibt, wenn a und b Vektoren sind, oder die Matrixmultiplikation, wenn a und b Matrizen sind
Wie für matmul Betrieb in numpy, es besteht aus Teilen des Punktergebnis, und es kann als definiert werden ,
> matmul (a, b) _ {i, j, k, c} =
Sie sehen also, dass matmul (a, b) ein Array mit einer kleinen Form zurückgibt, das einen geringeren Speicherverbrauch aufweist und in Anwendungen sinnvoller ist. Insbesondere in Kombination mit Rundfunk können Sie erhalten
matmul (a, b) _ {i, j, k, l} =
beispielsweise.
Anhand der beiden obigen Definitionen können Sie die Anforderungen für die Verwendung dieser beiden Operationen erkennen. Angenommen, a.shape = (s1, s2, s3, s4) und b.shape = (t1, t2, t3, t4)
Um Punkt (a, b) zu verwenden , benötigen Sie
- t3 = s4 ;
Um matmul (a, b) zu verwenden , benötigen Sie
- t3 = s4
- t2 = s2 oder einer von t2 und s2 ist 1
- t1 = s1 oder einer von t1 und s1 ist 1
Verwenden Sie den folgenden Code, um sich selbst zu überzeugen.
Codebeispiel
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