Addieren Sie Werte in numpy array nacheinander ohne Schleife [duplizieren]

8

Vielleicht wurde schon einmal gefragt, aber ich kann es nicht finden. Manchmal habe ich einen Index I, und ich möchte sukzessive diesen Index zu einem numpligen Array von einem anderen Array hinzufügen. Zum Beispiel:

%Vor%

gibt den erwarteten (korrekten) Wert aus:

%Vor%

während

%Vor%

führt zu der erwarteten (falschen) Antwort

%Vor%

Gibt es eine Möglichkeit, vektoriell zu machen, was ich will, ohne die Schleife? Wenn nicht, was ist der schnellste Weg, dies zu tun?

    
Johan 27.02.2018, 08:00
quelle

2 Antworten

9

Verwenden Sie numpy.add.at :

%Vor%

Alternativ np.bincount :

%Vor%

Was ist schneller?

Hängt davon ab. In diesem konkreten Beispiel scheint add.at marginal schneller zu sein, vermutlich weil wir Typen in der bincount Lösung konvertieren müssen.

Wenn OTOH A und B float dtype wären, wäre bincount schneller.

    
Paul Panzer 27.02.2018, 08:04
quelle
9

Sie müssen np.add.at verwenden:

%Vor%

druckt

%Vor%

Dies ist im Dokument vermerkt:

  

ufunc.at (a, Indizes, b = Keine)

     

Führt eine ungepufferte In-Place-Operation für den Operanden 'a' für Elemente aus, die durch 'Indizes' spezifiziert sind. Für den Zusatz ufunc entspricht diese Methode a [Indizes] + = b, außer dass die Ergebnisse für Elemente gesammelt werden, die mehr als einmal indiziert werden. Zum Beispiel wird a [[0,0]] + = 1 das erste Element nur wegen der Pufferung inkrementieren, während add.at (a, [0,0], 1) das erste Element zweimal inkrementieren wird.

    
Jonas Adler 27.02.2018 08:04
quelle

Tags und Links