HOWTO · Python

Come dichiarare un array 3D in Python

Ci sono 3 metodi principali che possono essere usati per dichiarare un array 3D in Python: le list comprehension, il metodo di moltiplicazione e il pacchetto numpy.

In questa pagina

Una struttura tridimensionale in Python può essere una lista annidata o un ndarray di NumPy. Usa le list comprehension annidate per liste Python indipendenti, la moltiplicazione di liste solo quando i suoi riferimenti condivisi sono accettabili, oppure NumPy per operazioni numeriche sugli array.

Dichiarare una lista 3D usando le list comprehension in Python

Una list comprehension annidata costruisce normali liste Python, creando una nuova lista interna a ogni livello. La sintassi della list comprehension qui sotto crea una struttura riempita di zeri con forma 2 × 2 × 2: due elementi esterni, ciascuno contenente due righe di due valori.

Esegui questo esempio:

n = 2
distance = [[[0 for k in range(n)] for j in range(n)] for i in range(n)]

print(distance)
print((len(distance), len(distance[0]), len(distance[0][0])))

I tre cicli annidati corrispondono alle tre dimensioni. Modifica n o usa una dimensione diversa per ciascun range per costruire una forma non cubica.

Dichiarare una lista 3D usando il metodo di moltiplicazione in Python

L’operatore * ripete una lista, ma non copia ricorsivamente le liste al suo interno. Nell’espressione qui sotto, le posizioni ripetute fanno riferimento alle stesse liste interne. Aggiornare una posizione può quindi modificare altre posizioni che condividono quella lista:

n = 2
distance = [[[0] * n] * n] * n
distance[0][0][0] = 7
print(distance)

Per liste annidate indipendenti, usa una comprehension a ogni livello, come [[[0] * n for _ in range(n)] for _ in range(n)]. La moltiplicazione è adatta per ripetere valori immutabili o quando i riferimenti condivisi sono intenzionali; non è equivalente alla comprehension per dati annidati mutabili.

Dichiarare un array 3D usando il pacchetto NumPy in Python

Usa NumPy quando hai bisogno di un ndarray e di operazioni numeriche sui suoi assi. È un pacchetto esterno; installalo nell’ambiente Python usato dal tuo progetto con pip install numpy prima di eseguire questo esempio. La tupla della forma indica la dimensione di ciascun asse e np.zeros riempie l’array di zeri. Il suo dtype predefinito è float.

try:
    import numpy as np
except ImportError:
    print("NumPy is not installed in this Python environment.")
else:
    new_array = np.zeros((2, 2, 2))
    print(new_array.shape)
    print(new_array.dtype)

I valori visualizzati di un array NumPy sono formattati in modo diverso da quelli di una lista annidata, ma sia le dimensioni sia l’inizializzazione a zero sono impostate dalla forma passata a np.zeros. Per zeri interi, passa dtype=int, ad esempio np.zeros((2, 2, 2), dtype=int). Vedi la panoramica di NumPy e il riferimento di np.zeros per i dettagli.