2016-06-10 28 views
2

Angenommen, ich habe ein ndarray, W der Form (m, n, n) und ein Vektor C der Dimension (m, n). Ich brauche diese beiden in der folgenden Art und Weise zu multiplizierenNumpy 3Darray Matrix Multiplikationsfunktion

result = np.empty(m,n) 
for i in range(m): 
    result[i] = W[i] @ C[i] 

Wie kann ich tun dies in einer Art und Weise vektorisiert ohne Schleifen und alles?

Antwort

1

Da Sie die erste Achse von beiden W und C ausgerichtet sind, halten müssen, während die letzte Achse von ihnen mit der Matrix-Multiplikation zu verlieren, würde ich vorschlagen np.einsum für einen sehr effizienten Ansatz, wie so -

np.einsum('ijk,ik->ij',W,C)

np.tensordot oder np.dot hat nicht die Funktion, Achsen ausgerichtet zu halten, und das ist, wo np.einsum verbessert.

0

Es ist durchgeführt unter Verwendung np.tensordot

ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)] 
assert np.all(result==ans)