Ce face np.argsort()
np.argsort() nu sortează valorile, ci returnează pozițiile lor în ordinea sortată: primul indice arată unde se află cea mai mică valoare, al doilea unde se află următoarea și așa mai departe. a[np.argsort(a)] este același lucru cu np.sort(a).
Puterea lui argsort vine când ai mai multe tablouri legate între ele: calculezi ordinea pe un tablou (notele) și aplici aceiași indici pe celălalt (numele). Pentru ordine descrescătoare inversezi indicii cu [::-1]; primele k poziții dau un „top k”.
Același truc sortează rândurile unui tablou 2D după o coloană: tabel[tabel[:, 1].argsort()].
Parametri
| Parametru | Descriere |
|---|---|
a |
Tabloul după care se stabilește ordinea. |
axis |
Axa de sortare; implicit ultima. |
kind / stable |
Algoritmul sau cererea unei sortări stabile (elementele egale păstrează ordinea inițială). |
descending |
Ordine descrescătoare (NumPy 2.5+). |
Ce returnează
Un tablou de indici întregi, de aceeași formă ca a.
Exemple
Exemplul 1: Ce returnează argsort
import numpy as np
note = np.array([7, 10, 5, 9])
ordine = np.argsort(note)
print(ordine)
print(note[ordine])
Rezultat
[2 0 3 1]
[ 5 7 9 10]
Exemplul 2: Clasamentul elevilor după note
Indicii obținuți din note se aplică pe tabloul cu nume; [::-1] dă ordinea descrescătoare.
import numpy as np
nume = np.array(["Ana", "Mihai", "Ioana", "Radu", "Elena"])
medii = np.array([8.75, 9.40, 7.10, 9.90, 8.20])
ordine = np.argsort(medii)[::-1]
for loc, i in enumerate(ordine, start=1):
print(loc, nume[i], medii[i])
print("Top 3:", nume[ordine[:3]])
Rezultat
1 Radu 9.9
2 Mihai 9.4
3 Ana 8.75
4 Elena 8.2
5 Ioana 7.1
Top 3: ['Radu' 'Mihai' 'Ana']
Exemplul 3: Sortarea rândurilor după o coloană
Fiecare rând este [cod produs, preț]; rândurile se sortează după preț și rămân întregi.
import numpy as np
produse = np.array([
[101, 45],
[102, 12],
[103, 99],
[104, 30],
])
print(produse[produse[:, 1].argsort()])
Rezultat
[[102 12]
[104 30]
[101 45]
[103 99]]
Greșeli frecvente
- Crezi că
np.argsort(a)dă „locul în clasament” al fiecărui element. Dă indicii în ordinea sortată, adică altceva. Locul fiecărui element estenp.argsort(np.argsort(a)). - Sortezi separat numele și notele cu
np.sort(): legătura dintre ele se pierde. Calculează o singură ordine cuargsortși aplic-o pe ambele.
Comenzi înrudite
np.sort(): Sortează elementele unui tablou: np.sort returnează o copie, a.sort() sortează pe loc; ordinea descrescătoare cu [::-1].np.argmax(): Returnează poziția (indicele) valorii maxime sau minime, nu valoarea; np.unravel_index transformă indicele în rând și coloană.Indexare și slicing: Accesează un element, o bucată, un rând sau o coloană dintr-un tablou NumPy cu paranteze pătrate.