Reshape Array in NumPy

Quando si lavora con Python e con l’analisi dei dati, prima o poi ci si imbatte nella necessità di cambiare la forma di un array senza modificarne i valori. È proprio qui che entra in gioco reshape in NumPy, una delle funzioni più usate e apprezzate da chi manipola dati numerici, matrici e strutture multidimensionali.

In questa guida vedremo in modo semplice come funziona numpy reshape, a cosa serve, quando usarlo e quali aspetti conviene conoscere per evitare errori comuni. L’obiettivo è offrire una spiegazione chiara anche a chi è agli inizi, senza rinunciare alla precisione.

Che cosa significa reshape in NumPy e a cosa serve davvero

In NumPy, reshape è il metodo che consente di modificare la struttura dimensionale di un array. In altre parole, permette di prendere una sequenza di dati organizzata in una certa forma e di ridisporla in un nuovo schema, purché il numero totale degli elementi rimanga identico.

Questo concetto è fondamentale. Se un array contiene 12 elementi, lo si può trasformare in una matrice 3×4, 2×6, 6×2 o anche in una struttura a più dimensioni, ma non in una forma che richieda un numero diverso di valori.

Per esempio, un array lineare creato con NumPy può essere convertito facilmente in una matrice:

import numpy as np

array = np.array(
{
    1, 2, 3, 4, 5, 6
}
)

nuova_forma = array.reshape(
    2,
    3
)

print(
    nuova_forma
)

Il risultato sarà un array con 2 righe e 3 colonne. I valori restano gli stessi, ma la loro disposizione cambia. Questo approccio è molto utile quando si preparano dati per il calcolo numerico, per il machine learning o per la semplice gestione di tabelle e matrici.

Dal punto di vista pratico, conoscere reshape significa saper adattare i dati al formato richiesto da una funzione o da un algoritmo. Molte librerie Python, infatti, si aspettano input con dimensioni specifiche, e NumPy offre proprio gli strumenti per gestire questi passaggi in modo rapido ed elegante.

Come cambiare la forma di un array tra una o più dimensioni

Uno degli usi più comuni di NumPy reshape consiste nel passare da un array monodimensionale a uno bidimensionale, oppure nel fare il percorso inverso. È un’operazione estremamente frequente, soprattutto quando si parte da dati grezzi e li si vuole organizzare in una struttura più leggibile.

Se, ad esempio, si crea una sequenza di 8 numeri, è possibile suddividerla in 4 righe da 2 colonne:

import numpy as np

dati = np.arange(
    8
)

matrice = dati.reshape(
    4,
    2
)

print(
    matrice
)

Con questo metodo, NumPy ridistribuisce gli elementi seguendo l’ordine originale. Non avviene una mescolanza casuale: i dati vengono semplicemente reinterpretati secondo una nuova forma.

Allo stesso modo, si può tornare a una struttura lineare. Questo passaggio è utile, per esempio, quando una matrice deve essere convertita in un vettore unico da passare a un altro processo:

import numpy as np

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

vettore = matrice.reshape(
    6
)

print(
    vettore
)

Un altro caso molto interessante è il passaggio verso dimensioni superiori. NumPy non si limita alle classiche righe e colonne: si possono creare array a 3 dimensioni o più, purché la quantità totale di elementi sia compatibile con la nuova struttura.

Ecco un esempio semplice:

import numpy as np

valori = np.arange(
    12
)

array_3d = valori.reshape(
    2,
    3,
    2
)

print(
    array_3d
)

Qui i 12 elementi vengono organizzati in una struttura composta da 2 blocchi, ciascuno con 3 righe e 2 colonne. Per chi inizia, può sembrare un concetto astratto, ma diventa molto naturale non appena si lavora con immagini, dataset o insiemi di campioni numerici.

Quando il reshape funziona correttamente e quando genera errore

La regola principale da ricordare è semplice: il numero totale degli elementi non deve cambiare. Se un array ha 10 valori, non lo si può trasformare in una matrice 3×4, perché servirebbero 12 elementi. In questo caso NumPy genera un errore.

Per capire meglio, osserviamo un esempio non valido:

import numpy as np

array = np.arange(
    10
)

nuova_forma = array.reshape(
    3,
    4
)

Questo codice non funziona, perché 10 non è compatibile con 3×4. È un dettaglio apparentemente banale, ma rappresenta una delle cause più frequenti di errore per chi muove i primi passi con NumPy.

Conviene quindi abituarsi a verificare sempre il totale degli elementi prima di cambiare forma. Una buona pratica è controllare la proprietà size dell’array, che indica quanti valori contiene complessivamente.

Usare -1 in reshape per lasciare a NumPy il calcolo automatico

Una caratteristica molto comoda di numpy.reshape è la possibilità di usare -1 in una delle dimensioni. In questo modo sarà NumPy a calcolare automaticamente il valore mancante, sempre nel rispetto del numero totale di elementi presenti.

Per esempio:

import numpy as np

array = np.arange(
    12
)

risultato = array.reshape(
    3,
    -1
)

print(
    risultato
)

In questo caso NumPy capisce da solo che, per distribuire 12 elementi in 3 righe, servono 4 colonne. Il risultato sarà quindi una matrice 3×4.

Questa soluzione è particolarmente utile quando si conosce solo una parte della forma finale oppure quando si vuole scrivere codice più flessibile. L’unico limite è che si può usare un solo -1 alla volta, altrimenti il calcolo diventerebbe ambiguo.

Differenza pratica tra forma dell’array e contenuto dei dati

Uno degli aspetti più importanti da comprendere è che reshape non modifica i valori, ma solo il loro modo di essere organizzati. Il contenuto rimane identico; ciò che cambia è la struttura con cui NumPy lo interpreta.

Questa distinzione è preziosa, perché aiuta a leggere correttamente il comportamento degli array. Se si cambia la forma di un array, non si sta effettuando un ordinamento, né una trasformazione matematica dei dati: si sta semplicemente attribuendo una nuova geometria alla stessa sequenza numerica.

Per chiarire il concetto, si può immaginare un mazzo di carte disposto in fila e poi ridistribuito su più righe. Le carte sono sempre quelle, ma il modo in cui vengono presentate cambia. reshape in NumPy funziona esattamente in questa maniera.

Perché reshape è così utile nell’analisi dati e nel machine learning

Chi utilizza Python per la scienza dei dati scopre molto presto quanto sia importante adattare il formato degli array. In numerosi casi, i dati vengono letti da file CSV, database o API sotto forma di sequenze lineari, ma devono essere riorganizzati per essere elaborati correttamente.

Nel machine learning, ad esempio, alcuni modelli richiedono input bidimensionali con la struttura righe = campioni e colonne = caratteristiche. In altri contesti, come la visione artificiale, può servire una forma tridimensionale o addirittura a quattro dimensioni.

Con reshape, questi passaggi diventano immediati e leggibili. È uno strumento che, nella pratica quotidiana, fa risparmiare tempo e riduce la complessità del codice. Per questo motivo è considerato uno dei pilastri dell’uso di NumPy.

Consigli utili per chi inizia a usare numpy reshape

Per usare bene reshape, è utile seguire alcune buone abitudini fin dall’inizio:

1. Controlla sempre il numero totale degli elementi. Se il totale non coincide con la nuova forma, il metodo non funzionerà.

2. Leggi la shape attuale dell’array. La proprietà shape permette di capire com’è organizzata la struttura di partenza.

3. Usa -1 quando vuoi maggiore flessibilità. È una scorciatoia elegante e spesso molto pratica.

4. Ricorda che i dati non cambiano. Cambia solo la loro disposizione logica.

5. Fai piccoli test. Quando si è alle prime armi, provare reshape su array con pochi elementi aiuta moltissimo a visualizzare il risultato.

Per esempio, un controllo rapido della forma può essere fatto così:

import numpy as np

array = np.arange(
    9
)

print(
    array.shape
)

matrice = array.reshape(
    3,
    3
)

print(
    matrice.shape
)

Questo semplice passaggio consente di vedere con chiarezza la differenza tra array monodimensionale e array bidimensionale.

Cambiare struttura agli array in NumPy tra righe, colonne e dimensioni superiori

In definitiva, reshape array in NumPy è uno strumento essenziale per chiunque lavori con dati numerici in Python. Permette di cambiare la forma di un array in modo veloce, ordinato e coerente, mantenendo invariato il contenuto.

Che si tratti di trasformare un vettore in matrice, di passare da due a tre dimensioni o di preparare dati per un algoritmo, reshape rappresenta una competenza fondamentale. Comprenderlo bene fin dall’inizio rende molto più semplice affrontare argomenti successivi legati a NumPy, alla data analysis e al machine learning.

Se stai imparando la libreria, dedicare tempo a fare pratica con reshape è una scelta concreta e intelligente: poche funzioni offrono un rapporto così alto tra semplicità d’uso e utilità reale.

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.