2017-05-10 2 views
0

Wie erhalte ich die Summe eines Punktprodukt effizientSumme der Punktprodukt numpy effizient

A = np.random.rand(20,200) 
x= np.random.rand(20) 
y= np.random.rand(20) 
num= np.zeros(20) 
for i in range (A.shape[0]): 
    num[i] = np.sum(A.T[i,:].dot(x[i]+y[i])) 
print num 

Gibt es eine Möglichkeit num ohne eine for-Schleife

+1

Ist das nicht "für i in range (A.shape [1]):" anstatt dass Sie den Iterator entlang der Spalten von 'A' mit der Transponierte von' A' durchlaufen haben? – Divakar

+0

Ich denke du brauchst nur 'num = np.zeros (20)', oder? –

+3

Die Frage ist, warum verwenden Sie 'Punkt', um eine Skalarmultiplikation zu machen? 'x [i] + y [i]' sind Skalare. –

Antwort

1

Sie nutzen könnten zu finden np.einsum -

num = np.einsum('ji,i->i',A[:,:20],x+y) 

Dieses Slicing von [:,:20] ist erforderlich, da Sie zwar die Zeilen von A.T mit A.T[i,:], dh Spalten von, durchlaufen, durchlaufen Sie nicht alle diese Spalten.

+0

Ich schrieb die Größen falsch das erste Mal A.shape [0] ist korrekt hiw je x und y sind (20,) nicht (200,) –

+0

@AyaAbdelsalam Bearbeitete Codes. – Divakar

+0

das funktioniert perfekt Ich wusste nicht über das Schneiden Danke! –

Verwandte Themen