Iterare Array in NumPy

Capire come iterare un array in NumPy è uno dei passaggi fondamentali per chi inizia a lavorare con Python e con l’analisi dei dati. Quando si parla di NumPy, infatti, si fa riferimento a una delle librerie più utilizzate per gestire strutture numeriche in modo rapido, ordinato ed efficiente.

In questa guida vedremo come scorrere gli elementi di un array con approcci diversi, partendo dal più semplice fino ad arrivare a strumenti più adatti a strutture complesse. L’obiettivo è offrirti una panoramica pratica e chiara sull’iterazione degli array NumPy, così da permetterti di scegliere il metodo più comodo in base al contesto.

Le tecniche principali che analizzeremo sono quattro: il classico ciclo for, l’uso di nditer, l’impiego di enumerate e l’iterazione su array multidimensionali. Anche se alcuni di questi strumenti possono sembrare molto simili, nella pratica presentano differenze importanti.

Come usare il ciclo for per iterare un array in NumPy

Il modo più intuitivo per iniziare a scorrere un array NumPy consiste nell’usare un ciclo for. È una soluzione particolarmente adatta a chi è alle prime armi, perché ricorda da vicino il comportamento delle liste Python.

Se hai un array monodimensionale, puoi attraversarne ogni elemento in modo diretto:

import numpy as np

arr =
np.array([1, 2, 3, 4, 5])

for elemento in arr
{
    print(elemento)
}

In questo caso, il ciclo legge un valore alla volta e lo stampa. È un esempio semplice, ma molto utile per comprendere il meccanismo di base dell’iterazione in NumPy.

Quando invece l’array ha più dimensioni, il ciclo for non restituisce subito i singoli numeri, ma i sotto-array del primo livello. Per esempio:

import numpy as np

arr =
np.array([[1, 2, 3], [4, 5, 6]])

for elemento in arr
{
    print(elemento)
}

L’output mostrerà prima [1 2 3] e poi [4 5 6]. Questo significa che il ciclo, su un array bidimensionale, itera riga per riga. È un dettaglio importante da ricordare, perché spesso chi inizia si aspetta di ottenere immediatamente ogni singolo valore.

Se vuoi arrivare ai singoli elementi, puoi usare un ciclo annidato:

import numpy as np

arr =
np.array([[1, 2, 3], [4, 5, 6]])

for riga in arr
{
    for elemento in riga
    {
        print(elemento)
    }
}

Questo approccio è chiaro e leggibile. Tuttavia, quando gli array diventano più grandi o hanno più dimensioni, può risultare meno pratico rispetto ad altri strumenti offerti da NumPy.

Iterazione degli array NumPy con nditer: metodo pratico ed efficace

Uno degli strumenti più comodi per scorrere tutti gli elementi di un array NumPy è nditer. Si tratta di un iteratore pensato proprio per lavorare con array anche multidimensionali, senza dover scrivere ogni volta cicli annidati.

Ecco un esempio basilare:

import numpy as np

arr =
np.array([[1, 2, 3], [4, 5, 6]])

for elemento in np.nditer(arr)
{
    print(elemento)
}

Con np.nditer(), NumPy attraversa l’intero array e restituisce i valori uno per uno. In altre parole, anche se l’array è bidimensionale, il risultato dell’iterazione sarà una sequenza lineare di elementi.

Questo metodo è molto apprezzato perché semplifica il codice e riduce il rischio di errori quando si lavora con strutture più articolate. Dal punto di vista pratico, è una soluzione che torna utile soprattutto quando vuoi leggere ogni dato senza preoccuparti troppo della profondità dell’array.

nditer è utile anche quando si desidera controllare meglio il modo in cui NumPy visita i dati. Per chi sta studiando, è già sufficiente sapere che rappresenta una forma più elegante e scalabile rispetto ai tanti cicli for annidati.

Come usare enumerate con NumPy per ottenere indice e valore

In molte situazioni non basta conoscere il valore di un elemento: serve anche sapere in quale posizione si trova. Qui entra in gioco enumerate, una funzione Python molto utile anche con gli array NumPy.

Considera questo esempio:

import numpy as np

arr =
np.array([10, 20, 30, 40])

for indice, valore in enumerate(arr)
{
    print(indice, valore)
}

In output otterrai coppie composte da indice e valore. È un metodo semplice ma estremamente efficace quando devi visualizzare la posizione degli elementi, controllare dati o applicare logiche basate sull’indice.

Su array monodimensionali, enumerate è immediato da usare e molto leggibile. Su array multidimensionali, invece, restituisce l’indice del primo livello, quindi spesso viene abbinato ad altri cicli:

import numpy as np

arr =
np.array([[10, 20], [30, 40]])

for indice, riga in enumerate(arr)
{
    print("Riga:", indice)
    print(riga)
}

Questo significa che enumerate è perfetto quando vuoi sapere quale riga o quale elemento di primo livello stai analizzando. Se invece desideri ottenere coordinate più dettagliate in array complessi, NumPy mette a disposizione strumenti più specifici, ma per iniziare questa funzione rimane tra le più versatili.

Iterare array multidimensionali in NumPy in modo semplice

Quando si passa agli array multidimensionali, l’iterazione richiede un po’ più di attenzione. Un array a due o più dimensioni, infatti, non si comporta come una semplice sequenza lineare: ogni livello contiene a sua volta altri blocchi di dati.

Supponiamo di avere un array tridimensionale:

import numpy as np

arr =
np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])

for blocco in arr
{
    print(blocco)
}

In questo caso, il ciclo scorre i blocchi principali. Non otterrai subito ogni singolo numero, ma delle sezioni dell’array. Per arrivare ai valori interni, puoi usare più cicli annidati:

import numpy as np

arr =
np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])

for matrice in arr
{
    for riga in matrice
    {
        for elemento in riga
        {
            print(elemento)
        }
    }
}

Questa soluzione funziona bene, ma diventa rapidamente più pesante da leggere quando aumentano le dimensioni. Ecco perché, nella pratica, molti sviluppatori preferiscono nditer per semplificare il processo:

import numpy as np

arr =
np.array([
    [[1, 2], [3, 4]],
    [[5, 6], [7, 8]]
])

for elemento in np.nditer(arr)
{
    print(elemento)
}

Dal punto di vista operativo, questa è spesso la scelta più ordinata per scorrere tutti i dati di un array multidimensionale. È anche un buon modo per evitare codice ripetitivo e mantenere una struttura più pulita.

Un altro aspetto utile da conoscere è che l’iterazione su array multidimensionali in NumPy dipende molto dallo scopo. Se vuoi lavorare per righe o per blocchi, il ciclo for classico è più leggibile. Se invece vuoi visitare ogni singolo valore in sequenza, nditer risulta generalmente più adatto.

Conclusione: il modo migliore per scorrere un array NumPy

Sapere come iterare array in NumPy è una competenza essenziale per chiunque voglia usare questa libreria con sicurezza. Il ciclo for rappresenta il punto di partenza ideale, perché è semplice e immediato. nditer, invece, offre una soluzione più flessibile quando gli array diventano multidimensionali. enumerate è perfetto se hai bisogno di lavorare insieme a indici e valori.

In sintesi, non esiste un solo metodo valido in assoluto: tutto dipende dalla struttura dell’array e dal risultato che vuoi ottenere. L’approccio migliore, soprattutto se sei all’inizio, è provare ciascuna tecnica su esempi concreti. In questo modo acquisirai una comprensione reale del comportamento degli array e potrai scrivere codice più chiaro ed efficace.

Se stai studiando la documentazione NumPy e vuoi imparare in modo graduale, partire dall’iterazione è una scelta eccellente. Ti permette infatti di prendere confidenza con la struttura interna degli array e di prepararti a operazioni più avanzate come selezione, filtraggio e manipolazione dei dati.

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.