Kumulative Summierung eines numperigen Arrays nach Index

8

Angenommen, Sie haben ein Array von Werten, die zusammen summiert werden müssen

%Vor%

und ein zweites Array, das angibt, welche Elemente summiert werden müssen

%Vor%

Das Ergebnis wird in einem neuen Array der Größe max(i)+1 gespeichert. So wäre beispielsweise i=[0,0,0,0,0] äquivalent dazu, alle Elemente von d zu summieren und das Ergebnis an der Position 0 eines neuen Arrays der Größe 1 zu speichern.

Ich habe versucht, dies mit

zu implementieren %Vor%

Allerdings fügt die Operation += jedes Element nur einmal hinzu und gibt damit das unerwartete Ergebnis von

%Vor%

statt

%Vor%

Wie würde man diese Art von Summierung richtig umsetzen?

    
dzhelil 31.08.2010, 04:32
quelle

5 Antworten

2

Diese Lösung sollte für große Arrays effizienter sein (sie iteriert die möglichen Indexwerte anstelle der einzelnen Einträge von i ):

%Vor%     
pberkes 02.09.2010, 15:42
quelle
9

Wenn ich die Frage richtig verstehe, gibt es dafür eine schnelle Funktion (solange das Datenfeld 1d ist)

%Vor%

np.bincount gibt ein Array für alle Ganzzahlbereiche (max (i)) zurück, auch wenn einige Zählungen Null sind

    
user333700 11.09.2010 01:00
quelle
2
%Vor%     
eat_a_lemon 31.08.2010 04:53
quelle
2

Juh_'s Kommentar ist die effizienteste Lösung. Hier ist der Arbeitscode:

%Vor%     
Noam 17.06.2014 10:36
quelle
0

Im allgemeinen Fall, wenn Sie Submatrizen mit Labels summieren möchten, können Sie den folgenden Code verwenden

%Vor%

Die erste Methode verwendet die Sparse-Matrix-Multiplikation. Der zweite ist die Verallgemeinerung der Antwort von user333700. Beide Methoden haben vergleichbare Geschwindigkeit:

%Vor%

Ausgabe:

%Vor%     
ybeltukov 02.06.2015 10:40
quelle

Tags und Links