HOWTO · NumPy

Creare un array vuoto di NumPy

Scopri come creare array NumPy vuoti in Python usando numpy.zeros() e numpy.empty(). Questa guida fornisce esempi chiari e spiegazioni dettagliate per ciascun metodo, aiutandoti a inizializzare gli array in modo efficiente per le tue attività di manipolazione dei dati. Che tu sia un principiante o un programmatore esperto, troverai spunti preziosi per migliorare le tue capacità di programmazione.

In questa pagina

Usa numpy.zeros() quando vuoi che ogni elemento inizi da 0. Usa numpy.empty() quando assegnerai un valore a ogni elemento prima di leggerlo. Nonostante il nome, numpy.empty() crea comunque il numero di elementi richiesto; semplicemente, non ne imposta i valori iniziali. L’argomento shape descrive le dimensioni dell’array: un singolo intero, come 5, crea un array monodimensionale, mentre una tupla, come (3, 4), crea tre righe e quattro colonne.

Crea un array riempito di zeri con numpy.zeros()

numpy.zeros() alloca un array e inizializza tutti i suoi elementi a 0. Passa un intero per creare un array monodimensionale oppure una tupla per specificare più dimensioni. Per impostazione predefinita, NumPy usa un tipo di dato a virgola mobile, quindi i valori visualizzati possono includere cifre decimali. Se invece vuoi elementi interi, passa dtype=int. Scegli questa funzione quando è utile avere un valore iniziale noto, per esempio se i calcoli successivi aggiornano solo alcune posizioni e vuoi che le altre restino a 0.

Questo esempio crea un array monodimensionale e un array intero bidimensionale, quindi aggiorna una posizione. Stampa i valori e la tupla restituita dall’attributo shape dell’array.

Esegui questo esempio:

import numpy as np

values = np.zeros(5)
matrix = np.zeros((3, 4), dtype=int)
values[2] = 7

print(values)
print(matrix.shape)
[0. 0. 7. 0. 0.]
(3, 4)

Poiché numpy.zeros() inizializza ogni posizione, è adatta anche quando prevedi di riempire l’array gradualmente. Il tipo di dato iniziale è importante: un array di interi memorizza valori interi, mentre un array a virgola mobile può rappresentare valori frazionari. Il parametro shape specifica sempre le dimensioni; non indica necessariamente “righe e colonne”. Una forma composta da un solo valore, come 5, ha una dimensione, mentre (3, 4) ne ha due.

Crea un array non inizializzato con numpy.empty()

Per i normali tipi numerici, numpy.empty() crea un array con la forma richiesta senza inizializzarne gli elementi, quindi i valori iniziali non sono specificati. Il tipo object si comporta diversamente: per esempio, np.empty(2, dtype=object) inizializza entrambi gli elementi a None. Assegna un valore valido prima di leggere qualsiasi elemento e non fare affidamento sul contenuto iniziale degli array numerici.

Usa questa funzione quando il programma può riempire immediatamente tutti gli elementi e, per il carico di lavoro previsto, è utile evitare il passaggio di inizializzazione. L’eventuale risparmio di tempo dipende dalle dimensioni dell’array, dalle assegnazioni successive, dall’hardware e dal resto del lavoro: non esiste un vantaggio universale in termini di velocità. Se ti servono valori iniziali affidabili o aggiornerai solo alcune posizioni, usa invece numpy.zeros().

L’esempio seguente assegna un valore a ogni posizione prima di leggere l’array. Puoi modificare le dimensioni o il tipo di dato mantenendo la stessa regola: scrivi in tutti gli elementi prima di usarli.

import numpy as np

values = np.empty((2, 3), dtype=int)
values[:] = [[1, 2, 3], [4, 5, 6]]

print(values)
[[1 2 3]
 [4 5 6]]

Per un array monodimensionale, puoi seguire lo stesso approccio con values = np.empty(5, dtype=int), assegnando un valore a tutte e cinque le posizioni prima di leggerne una qualsiasi. Una tupla specifica allo stesso modo le dimensioni di un array multidimensionale. Il nome numpy.empty() indica l’assenza di inizializzazione, non un array privo di elementi: la forma e il numero di elementi dipendono comunque dall’argomento fornito.