Ordinare array in NumPy

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.

Corsi correlati

Design Pattern per videogiochi

I Design Pattern sono soluzioni a problemi comuni che si incontrano nello sviluppo del software. Nel contesto dei videogiochi, questi pattern possono aiutare a gestire la complessità crescente dei giochi moderni. Sei appassionato di videogiochi? Hai mai pensato a come vengono progettati e sviluppati? Sei curioso di scoprire i segreti dietro la creazione dei tuoi giochi preferiti? Allora sei nel posto giusto! Questo corso è stato progettato per fornirti una solida comprensione dei Design Pattern, strumenti fondamentali per ogni sviluppatore di giochi. Attraverso esempi pratici e realistici, esploreremo insieme come questi pattern possono aiutarti a creare giochi più efficienti, flessibili e mantenibili.

Corso Fondamenti di Python

Python, uno dei linguaggi di programmazione più popolari al mondo, è ampiamente utilizzato da colossi dell’informatica e della tecnologia come Google, la Nasa e Mozilla.
Questo corso sui fondamenti di Python esplorerà le ragioni del suo successo duraturo. Impareremo la potente ed espressiva sintassi di Python, che consente di ottenere risultati impressionanti con poche righe di codice.

Blender Masterclass 2

I paesaggi, in generale, possono risultare intimidatori data la loro complessità, costituita da numerosi elementi che sembrano formare qualcosa di virtualmente infinito. Durante le lezioni di questo corso, ci concentreremo su una scomposizione delle diverse fasi coinvolte nella creazione di una scena, affrontandole una alla volta attraverso passi graduati.

Blender Masterclass 1

In questo corso di Blender 3D, Masha, in collaborazione con Gedemy, vi mostrerà il processo di modellazione, UV mapping, shading, e texture painting di un asset. Una volta apprese le basi, vedremo anche come effettuare il baking delle textures e la preparazione con successivo export della mesh in modo che possa essere utilizzabile all’interno di un qualsiasi altro software.

Crea il tuo account gratuito Gedemy

Gedemy è la prima piattaforma di formazione italiana che ti permette di sviluppare competenze in ambiti come Game Design, Programming, Arte, 3D, Tech, AI e molto altro.