Ich habe zwei 2D-Nummernfelder (in diesem Beispiel in Bezug auf Größe und Inhalt vereinfacht) mit identischen Größen.
Eine ID-Matrix:
%Vor%und eine Wertematrix:
%Vor%Mein Ziel ist zu zählen und Summe die Werte aus der zweiten Matrix gruppiert durch die IDs aus der ersten Matrix:
%Vor% Ich kann dies in einer for
-Schleife tun, aber wenn die Matrizen Größen in Tausend statt nur 5x5 und Tausende von eindeutigen IDs haben, braucht es viel Zeit für die Verarbeitung.
Hat numpy
eine clevere Methode oder eine Kombination von Methoden dafür?
Hier ist ein vektorisierter Ansatz, um die Zählungen für ID
und ID-based
summierte Werte für value
mit einer Kombination von np.unique
und np.bincount
-
Um die endgültige Ausgabe als Wörterbuch zu erhalten, können Sie das Schleifenverständnis verwenden, um die summierten Werte zu sammeln, wie zum Beispiel -
%Vor%Beispiellauf -
%Vor%Dies ist mit einer Kombination einiger einfacher Methoden möglich:
numpy.unique
, um jede ID Das kann so aussehen:
%Vor%Das numpy_indexed -Paket (Disclaimer: Ich bin der Autor) hat eine Funktionalität, um diese Art von Problemen elegant und vektorisiert zu lösen :
%Vor%Hinweis: Wenn Sie die Summe und die Anzahl berechnen wollen, um einen Mittelwert zu berechnen, gibt es auch group_by.mean; plus viele andere nützliche Funktionen.
Tags und Links python arrays performance numpy matrix