2016-06-30 4 views
1

Ich habe 2 Sätze von n*m Vektoren x_ij und y_ij der Dimension d gespeichert in zwei np.ndarrayX und Y der Form n*m*d. Ich möchte x_ij.y_ij die n*m Matrix von skalaren Produkte erhalten. Im Moment mache ich das so:elegantes Paar weise Skalarprodukt viele Vektoren in numpy

(X.T.reshape((d,m*n)) * Y.T.reshape((d,n*m))).sum(axis=0).reshape((m,n)).T 

Es funktioniert, aber fühlt sich hässlicher/hackier als es sein muss. Gibt es eine elegantere Art, diese Operation auszuführen?

+0

Sollten Sie nicht gebucht haben, diese Frage auf Codereview? ja :) http://stackoverflow.com/questions/42334719/simplifying-looped-numpy-operations – hpaulj

+0

@hpaulj, ... mein Kommentar war, bevor er seine Bedürfnisse geklärt :) – Julien

+0

Pot ... Kessel ... – luckytaxi

Antwort

1

Nun, halten Sie die ersten beiden Achsen ausgerichtet sind und die Summe senkend letzten Achsen an beiden Eingängen. Für einen solchen Fall zu lösen, einen effizienten Weg, um es mit np.einsum wäre, wie so -

np.einsum('ijk,ijk->ij',X,Y) 
Verwandte Themen