Scheinbar einfache Frage: Ich habe ein Array mit zwei Spalten, die erste repräsentiert eine ID und die zweite eine Anzahl. Ich möchte es mit einem anderen, ähnlichen Array aktualisieren, so dass
%Vor%Gibt es eine Möglichkeit, dies mit Indexierung / Slicing zu tun, so dass ich nicht einfach über jede Zeile iterieren muss?
Vorgehensweise # 1: Sie können % verwenden. co_de% , um eine solche np.add.at
Operation wie folgt durchzuführen -
Um ID-based
und a_idx
als wahrscheinlich schnellere Alternative zu finden, b_idx
könnte so verwendet werden -
Beispiel Eingabe-Ausgabe:
%Vor% Vorgehensweise # 2: Sie können np.searchsorted
verwenden. um die gleiche ID basierend auf dem Hinzufügen zu machen -
Wenn die ID-Spalten in np.bincount
und a
sortiert sind, wird es einfacher, da wir einfach Masken mit b
verwenden können, um in das mit np.in1d
like so -
Beispiellauf -
%Vor% Hinweis Wenn Sie möchten, dass das Ergebnis sortiert wird, können Sie np.lexsort
:
Erläuterung:
Zuerst finden Sie die eindeutigen IDs mit folgendem Befehl:
%Vor% Finde dann die Unterschiede zwischen den IDs, wenn a
und alle IDs:
Finde dann die Objekte in b
mit den IDs in diff
:
Und schließlich verkette das Ergebnis mit der Liste a
:
Betrachten Sie ein anderes Beispiel mit der Sortierung:
%Vor%