np.unique() în NumPy

Returnează valorile distincte dintr-un tablou, sortate, și opțional de câte ori apare fiecare (return_counts).

Sintaxă
np.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None)

Ce face np.unique()

np.unique() elimină dublurile și returnează valorile distincte, în ordine sortată. Merge și pe numere, și pe texte.

Cu return_counts=True primești, pe lângă valori, de câte ori apare fiecare. Cu return_index=True primești poziția primei apariții a fiecărei valori în tabloul inițial, iar cu return_inverse=True primești, pentru fiecare element inițial, indicele valorii lui în lista de valori unice. Când ceri mai multe, rezultatul este un tuplu în ordinea: valori, index, inverse, counts.

Cu axis=0 se caută rânduri distincte într-un tablou 2D.

Parametri

Parametru Descriere
ar Tabloul de intrare (fără axis este aplatizat).
return_index Returnează și indicii primei apariții.
return_inverse Returnează și indicii care reconstruiesc tabloul inițial din valorile unice.
return_counts Returnează și numărul de apariții al fiecărei valori (NumPy 1.9+).
axis Axa pe care se caută elemente distincte, de exemplu 0 pentru rânduri.

Ce returnează

Tabloul sortat cu valorile distincte sau, dacă ceri și altceva, un tuplu de tablouri.

Exemple

Exemplul 1: Orașele distincte și câte comenzi are fiecare

import numpy as np

orase = np.array(["Iași", "Cluj", "Iași", "Brașov", "Cluj", "Iași"])
print(np.unique(orase))

valori, numar = np.unique(orase, return_counts=True)
for oras, n in zip(valori, numar):
    print(oras, n)

Rezultat

['Brașov' 'Cluj' 'Iași']
Brașov 1
Cluj 2
Iași 3

Exemplul 2: Prima apariție a fiecărei note

import numpy as np

note = np.array([8, 10, 8, 7, 10, 9])
valori, prima = np.unique(note, return_index=True)
print(valori)
print(prima)

Rezultat

[ 7  8  9 10]
[3 0 5 1]

Exemplul 3: Codificarea categoriilor cu return_inverse

Fiecare oraș primește un număr: indicele lui în lista sortată de orașe.

import numpy as np

orase = np.array(["Iași", "Cluj", "Iași", "Brașov", "Cluj"])
valori, coduri = np.unique(orase, return_inverse=True)
print(valori)
print(coduri)
print(valori[coduri])

Rezultat

['Brașov' 'Cluj' 'Iași']
[2 1 2 0 1]
['Iași' 'Cluj' 'Iași' 'Brașov' 'Cluj']

Greșeli frecvente

  • Te aștepți ca valorile să rămână în ordinea apariției. np.unique() le sortează; pentru ordinea apariției sortează indicii din return_index: valori[np.argsort(prima)].
  • Uiți că, odată cu return_counts=True, rezultatul devine un tuplu și scrii len(np.unique(a, return_counts=True)), care dă 2. Despachetează în două variabile.

Comenzi înrudite

  • np.sort(): Sortează elementele unui tablou: np.sort returnează o copie, a.sort() sortează pe loc; ordinea descrescătoare cu [::-1].
  • np.argsort(): Returnează indicii care ar sorta tabloul; așa sortezi un tablou după altul, de exemplu numele după note.
  • np.where(): Cu trei argumente alege valori după o condiție (dacă-altfel pe tablouri); cu un argument returnează pozițiile unde condiția e adevărată.
  • Măști booleene: Selectează elementele care îndeplinesc o condiție, cu un tablou de True/False pus între paranteze pătrate.