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?
Verwenden Sie numpy.add.at
:
Alternativ np.bincount
:
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.
Sie müssen np.add.at
verwenden:
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.