Ist es numpy group by-Funktion?
Gibt es eine Funktion in numpy zu Gruppe dieses array von unten durch die erste Spalte?
Konnte ich nicht finden, eine gute Antwort über das internet ist.
>>> a
array([[ 1, 275],
[ 1, 441],
[ 1, 494],
[ 1, 593],
[ 2, 679],
[ 2, 533],
[ 2, 686],
[ 3, 559],
[ 3, 219],
[ 3, 455],
[ 4, 605],
[ 4, 468],
[ 4, 692],
[ 4, 613]])
Wollte output:
array([[[275, 441, 494, 593]],
[[679, 533, 686]],
[[559, 219, 455]],
[[605, 468, 692, 613]]], dtype=object)
- Ich denke, du meintest ein array von Listen, keine Listen von Listen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Inspiriert von Eelco Hoogendoorn Bibliothek, aber ohne seine Bibliothek, und mit der Tatsache, dass die erste Spalte des Arrays ist immer zu.
Ich nicht "timeit" aber dies ist wahrscheinlich der schnellere Weg zur Erreichung der Frage :
PS: ich schrieb eine ähnliche Linie, weil ich brauchte, um "group by" die Ergebnisse der np.ungleich null:
Numpy ist nicht sehr praktisch, weil hier die gewünschte Ausgabe nicht ein array von ganzen zahlen (es ist ein array mit der Liste der Objekte).
Schlage ich vor, entweder die Reine Python-Weg...
...oder die pandas Weg:
Den numpy_indexed - Paket (disclaimer: ich bin sein Autor) zielt darauf ab, diese Lücke zu füllen, die in numpy. Alle Operationen in numpy-indiziert sind, vollständig vektorisiert, und nicht O(n^2) algorithmen, die verletzt wurden während der Produktion dieser library.
Beachten Sie, dass es in der Regel effizienter, direkt berechnen relevanten Eigenschaften über solche Gruppen (ie, group_by(keys).Mittelwert(Werte)), eher als die erste Aufteilung in eine Liste /jagged array.
O(n^2)
algorithmen wurden verletzt" .. Warum willst du das "nett sein" zu Ihnen ? statt do, die Sie bedrohen: Sie zu zwingen, "mehr " lean"Ausgänge:
array([[x] for x in [ list(a[a[:,0]==i,1]) for i in n]])
np.unique
stattunique
zu clearify code.Vereinfachung der Antwort von Vincent J kann man
return_index = True
stattreturn_counts = True
und loszuwerden, diecumsum
:Ausgabe
Ich benutzt np.unique (), gefolgt von np.extract()
[array([275, 441, 494, 593]), array([679, 533, 686]), array([559, 219, 455]), array([605, 468, 692, 613])]
gegeben X als array mit Elementen, die Sie wollen, werden gruppiert und y (1D-array) als die entsprechenden Gruppen, die folgende Funktion hat die Gruppierung mit numpy:
So,
groupby(a[:,1], a[:,0])
gibt[array([275, 441, 494, 593]), array([679, 533, 686]), array([559, 219, 455]), array([605, 468, 692, 613])]