2017-06-23 6 views
1

Ich verwende eine Eingabematrix der Form m * n oder m Zeilen und n Spalten. Ich möchte das elementweise Produkt aller möglichen Kombinationen von Spalten berechnen. Daher muss ich eine Matrix der Form m * n*n ausgeben.
Konkreter sagen wir, meine Eingangsmatrix hat Spalten [c1, c2, c3 ... cn]. Meine Ausgangsmatrix sollte wie folgt aussehen: [c1*c1 c1*c2 ... c1*cn c2*c1 c2*c2 ... cn*cn], wobei ci*cj ein Vektor ist, der die elementweise Multiplikation der Vektoren ci und cj darstellt.Alle möglichen Spaltenmultiplikationen in numpy?

Ich möchte nicht eine for Schleife verwenden, auf der Suche nach einer sauberen Möglichkeit, dies mit numpy APIs zu tun.

Antwort

2

Ein Ansatz wäre broacasting zu verwenden, nachdem den Eingangs-Array mit zwei 3D erweiterten Versionen mit Singletons Abmessungen entlang der zweiten und dritten erstreckt, und dann Durchführen elementweise Multiplikation und eine abschließende reshape wird für eine 2D Endausgabe benötigt.

So eine Implementierung wäre -

(a[:,:,None]*a[:,None,:]).reshape(a.shape[0],-1) 

anders gesagt, die Verwendung von ... machen und Überspringen der letzten Achse nach None für die zweite erweiterte Version wäre -

(a[...,None]*a[:,None]).reshape(a.shape[0],-1) 

Another Ansatz mit np.einsum -

np.einsum('ij,ik->ijk',a,a).reshape(a.shape[0],-1) 
Verwandte Themen