So habe ich die folgenden numpy Arrays:Vektorisierung - Hinzufügen von Arrays ohne Schleifen?
c = array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
X = array([[10, 15, 20, 5],
[ 1, 2, 6, 23]])
y = array([1, 1])
ich jede 1x4
Zeile in dem X
Array zu einem der Spalten in c
hinzufügen versuchen. Das y
Array gibt an, welche Spalte. Das obige Beispiel bedeutet, dass wir beide Zeilen im Array X
der Spalte 1
von c hinzufügen. Das heißt, wir sollten folgendes Ergebnis erwarten:
c = array([[ 1, 2+10+1, 3], = array([[ 1, 13, 3],
[ 4, 5+15+2, 6], [ 4, 22, 6],
[ 7, 8+20+6, 9], [ 7, 34, 9],
[10, 11+5+23, 12]]) [10, 39, 12]])
Weiß jemand, wie ich das ohne Schleifen machen kann? Ich versuchte c[:,y] += X
, aber es scheint, als ob nur die zweite Zeile von X
Spalte 1
von c
einmal hinzugefügt wird. Dabei ist zu beachten, dass y
nicht zwingend [1,1]
sein muss, es kann auch [0,1]
sein. In diesem Fall würden wir die erste Reihe von X
zu Spalte 0
von c
und die zweite Reihe von X
zu Spalte 1
von c
hinzufügen.
Ich weiß nicht, ob es klarer ist, aber weil e '.T' gibt eine Ansicht zurück, Sie können das gleiche Ergebnis erhalten, indem Sie alles transponieren, was zu einer einfacheren Indizierung führt, d. h.' np.add.at (c.T, y, X) 'erzeugt den gleichen Effekt. – Jaime
Vielen Dank für den Auszug über Universalfunktionen, sehr nützlich! – Tonechas