Seite 1 von 1
Numpy-Array Sortieren
Verfasst: Montag 22. August 2011, 02:38
von smith0815
Hi
Kann ich ein Numpy-Array
Code: Alles auswählen
[['Mayer', 'Frank', 'Berlin'],
['Bayer', 'Peter, 'Frankfurt'],
['Geyer', 'Rita', 'Jülich']]
nur nach
einer Spalte, so dass aber die Verbindung in der Zeile erhalten bleibt
Code: Alles auswählen
[['Bayer', 'Peter, 'Frankfurt'],
['Geyer', 'Rita', 'Jülich'],
['Mayer', 'Frank', 'Berlin']]
Re: Numpy-Array Sortieren
Verfasst: Montag 22. August 2011, 06:59
von CM
Re: Numpy-Array Sortieren
Verfasst: Montag 22. August 2011, 21:35
von smith0815
na klar
aber ich sehe nur Sortierungen des kompletten Arrays, oder habe ich etwas übersehen?
Re: Numpy-Array Sortieren
Verfasst: Montag 22. August 2011, 21:50
von deets
"axis along which to sort" zB? Ist doch sogar nen Beispiel dabei.
Re: Numpy-Array Sortieren
Verfasst: Dienstag 23. August 2011, 08:30
von smith0815
Es geht mir aber nicht darum entlang einer Achse zu sortieren, sondern entlang einer Spalte, also
Code: Alles auswählen
[['Mayer', 'Frank', 'Berlin'],
['Bayer', 'Peter, 'Frankfurt'],
['Geyer', 'Rita', 'Jülich']]
nach Spalte 0
Code: Alles auswählen
[['Bayer', 'Peter, 'Frankfurt'],
['Geyer', 'Rita', 'Jülich'],
['Mayer', 'Frank', 'Berlin']]
nach Spalte 3
Code: Alles auswählen
[['Mayer', 'Frank', 'Berlin'],
['Bayer', 'Peter, 'Frankfurt'],
['Geyer', 'Rita', 'Jülich']]
Re: Numpy-Array Sortieren
Verfasst: Dienstag 23. August 2011, 09:11
von BlackJack
@smith0815: Wäre `argsort()` auf der Spalte und das Ergebnis dann als Index auf dem gesamten Array verwenden eine Lösung?
Edit:
Code: Alles auswählen
In [43]: a
Out[43]:
array([['Mayer', 'Frank', 'Berlin'],
['Bayer', 'Peter', 'Frankfurt'],
['Geyer', 'Rita', 'J\xc3\xbclich']],
dtype='|S9')
In [44]: a[np.argsort(a[:,0])]
Out[44]:
array([['Bayer', 'Peter', 'Frankfurt'],
['Geyer', 'Rita', 'J\xc3\xbclich'],
['Mayer', 'Frank', 'Berlin']],
dtype='|S9')
In [45]: a[np.argsort(a[:,2])]
Out[45]:
array([['Mayer', 'Frank', 'Berlin'],
['Bayer', 'Peter', 'Frankfurt'],
['Geyer', 'Rita', 'J\xc3\xbclich']],
dtype='|S9')
Re: Numpy-Array Sortieren
Verfasst: Dienstag 23. August 2011, 09:52
von CM
Also, mein Verweis auf np.sort kommt eher daher, daß ich nicht davon ausgegangen bin die Spalten numerisch anzusprechen, wo es doch eher um ein structured array geht. In dem Fall geht nämlich - analog zum verlinkten Beispiel:
Code: Alles auswählen
In [46]: a
Out[46]:
array([('Mayer', 'Frank', 'Berlin'), ('Bayer', 'Peter', 'Frankfurt'),
('Geyer', 'Rita', 'J\xc3\xbclich')],
dtype=[('name', '|S9'), ('first', '|S9'), ('city', '|S9')])
In [47]: np.sort(a, order = 'city')
Out[47]:
array([('Mayer', 'Frank', 'Berlin'), ('Bayer', 'Peter', 'Frankfurt'),
('Geyer', 'Rita', 'J\xc3\xbclich')],
dtype=[('name', '|S9'), ('first', '|S9'), ('city', '|S9')])
Aber da ist natürlich nicht nur ein syntaktischer, sondern vor allem ein semantischer Unterschied. Die Frage ist halt, wie Du, smith0815, am liebsten Deine Daten auffassen willst.
HTH
Christian
PS Die Typen habe ich jetzt einfach mal so gesetzt, in der Realität sollte man für wirklich effizientes Sortieren etwas mehr Feintuning betreiben und fürs Lesen aus Files ist u. U.
PyTables zu empfehlen.
PPS Mehr zu
Structured Arrays gibt es hier (auch auf den Fuß der Seiten achten, wegen des Links zu RecArrays).
Re: Numpy-Array Sortieren
Verfasst: Donnerstag 25. August 2011, 22:15
von smith0815
Das mit dem Index war eine gute Idee und genau was ich suchte
Danke.