Quando si lavora con i dati in Python, prima o poi arriva il momento in cui bisogna ordinare un array. In questo contesto, NumPy mette a disposizione strumenti rapidi, affidabili e semplici da usare anche per chi è agli inizi. Capire come funziona l’ordinamento degli array in NumPy è utile in molti scenari pratici: dall’analisi dei dati alla pulizia di un dataset, fino alla preparazione di valori da visualizzare o confrontare.
In questa guida vedremo come usare le funzioni principali dedicate all’ordinamento, con esempi concreti e spiegazioni chiare. L’obiettivo è mostrarti non solo come ordinare un array con NumPy, ma anche quando conviene usare un metodo invece di un altro.
Come usare np.sort per ordinare un array senza modificarlo
La funzione np.sort() è una delle più immediate per ordinare i dati. Il suo vantaggio principale è che restituisce un nuovo array ordinato, lasciando invariato quello originale. Questo comportamento è molto comodo quando vuoi conservare i dati di partenza senza alterazioni.
Ecco un primo esempio di utilizzo:
import numpy as np
array = np.array([7, 2, 9, 1, 5])
ordinato = np.sort(array)
print(array)
print(ordinato)
In questo caso, l’array originale resta identico, mentre la variabile ordinato contiene i valori in ordine crescente. È un approccio ideale quando si desidera lavorare in modo più sicuro, evitando modifiche accidentali.
Per impostazione predefinita, np.sort() ordina in senso crescente. Se vuoi un ordinamento decrescente, puoi combinare il risultato con una tecnica semplice, ad esempio invertendo l’array ordinato:
import numpy as np
array = np.array([7, 2, 9, 1, 5])
decrescente = np.sort(array)[::-1]
print(decrescente)
Questo metodo è molto usato perché è leggibile e pratico. Per chi sta imparando NumPy, rappresenta una soluzione intuitiva e facilmente memorizzabile.
Come funziona np.argsort per ottenere gli indici dell’ordinamento
La funzione np.argsort() è particolarmente interessante perché non restituisce direttamente i valori ordinati, ma gli indici che permettono di ricostruire l’ordine corretto. A prima vista può sembrare meno immediata, ma in realtà è estremamente utile quando devi mantenere il collegamento tra i dati ordinati e la loro posizione originale.
Vediamo un esempio pratico:
import numpy as np
array = np.array([40, 10, 30, 20])
indici = np.argsort(array)
print(indici)
Il risultato sarà un array di indici che indica in quale sequenza leggere gli elementi per ottenere l’ordine crescente. Se vuoi usare questi indici per creare l’array ordinato, puoi fare così:
import numpy as np
array = np.array([40, 10, 30, 20])
indici = np.argsort(array)
ordinato = array[indici]
print(ordinato)
Questo approccio è molto prezioso quando lavori con strutture parallele, ad esempio una lista di nomi associata a una lista di punteggi. Ordinando gli indici, puoi riordinare più insiemi di dati in modo coerente.
In termini pratici, np.argsort() è una funzione da conoscere bene se vuoi fare un passo in più nell’uso di NumPy e gestire in modo più intelligente la relazione tra valori e posizioni.
Ordinamento di array multidimensionali con np.sort in NumPy
Quando si passa dagli array monodimensionali a quelli con più dimensioni, il comportamento dell’ordinamento diventa ancora più interessante. Con np.sort(), infatti, è possibile decidere lungo quale asse effettuare l’ordinamento.
Considera questo array bidimensionale:
import numpy as np
array = np.array(
[
[3, 1, 2],
[9, 7, 8]
]
)
ordinato = np.sort(array)
print(ordinato)
Per default, NumPy ordina lungo l’ultimo asse disponibile. In un array a due dimensioni, questo significa che ogni riga viene ordinata separatamente. Il risultato, quindi, mostrerà ogni riga sistemata in ordine crescente.
Se invece vuoi ordinare per colonna, puoi specificare il parametro axis:
import numpy as np
array = np.array(
[
[3, 1, 2],
[9, 7, 8]
]
)
ordinato_colonne = np.sort(array, axis=0)
print(ordinato_colonne)
In questo caso, l’ordinamento avviene verticalmente. È un dettaglio importante, perché negli array multidimensionali il concetto di ordine dipende dalla struttura dei dati. Comprendere bene il parametro axis ti aiuta a evitare risultati inattesi e a controllare con precisione l’output.
Se stai affrontando dataset più complessi, questa funzionalità diventa essenziale. In ambito analitico, ordinare righe o colonne può cambiare del tutto il senso del risultato finale.
Come applicare un ordine personalizzato con np.sort in NumPy
In alcuni casi non basta ordinare semplicemente in modo crescente o decrescente. Potresti avere bisogno di un ordinamento personalizzato, ad esempio su array strutturati oppure su dati che contengono più campi.
NumPy offre una gestione molto utile degli array strutturati, che permettono di lavorare con record simili a piccole tabelle. In questi casi puoi specificare il campo da usare per l’ordinamento.
import numpy as np
dati = np.array(
[
("Luca", 28),
("Anna", 22),
("Marco", 35)
],
dtype=[
("nome", "U10"),
("eta", "i4")
]
)
ordinato = np.sort(dati, order="eta")
print(ordinato)
Qui l’array viene ordinato in base al campo eta. È una soluzione molto pratica quando vuoi gestire dati composti da più informazioni collegate tra loro.
Volendo, puoi anche ordinare per più campi, stabilendo una priorità. Questo torna utile, per esempio, se desideri ordinare prima per cognome e poi per nome, oppure prima per categoria e poi per prezzo.
import numpy as np
dati = np.array(
[
("Rossi", "Luca"),
("Bianchi", "Anna"),
("Rossi", "Marco")
],
dtype=[
("cognome", "U10"),
("nome", "U10")
]
)
ordinato = np.sort(dati, order=["cognome", "nome"])
print(ordinato)
Questo tipo di ordinamento è particolarmente potente e dimostra quanto NumPy sia adatto anche a contesti più articolati. Pur essendo una libreria spesso associata ai numeri, in realtà permette una gestione ordinata e molto efficace anche di strutture dati più ricche.