Come avviare un array 2-D in Python

Jinku Hu 18 luglio 2021
  1. Metodo di comprensione della lista per iniziare un array 2D
  2. Metodo range per iniziare un array 2D
  3. Metodo NumPy per avviare un array 2D
Come avviare un array 2-D in Python

Questa guida introdurrà diversi metodi per avviare un array 2-D in Python. Faremo un array 2-D 3x5 nei seguenti esempi.

Metodo di comprensione della lista per iniziare un array 2D

>>> column, row = 3, 5
>>> array2D = [[0 for _ in range(row)] for _ in range(column)]
>>> array2D
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Questo metodo di comprensione della lista nidificata crea un array 2-D con il valore iniziale 0. Naturalmente, si può cambiare il valore iniziale con qualsiasi valore da assegnare nella propria applicazione.

Metodo range per iniziare un array 2D

Se non ci si preoccupa del valore iniziale nell’array 2-D, il valore 0 potrebbe anche essere eliminato.

In Python 2.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

In Python 3.x

>>> column, row = 3, 5
>>> A = [range(row) for _ in range(column)]
>>> A
[range(0, 5), range(0, 5), range(0, 5)]

Non si potrebbe semplicemente usare range(x) per avviare l’array 2-D in Python 3.x perché range restituisce un oggetto contenente una sequenza di numeri interi in Python 3.x, ma non una lista di numeri interi come in Python 2.x.

range in Python 3.x è più simile a xrange in Python 2.x. L’oggetto range in Python 3.x è immutabile, quindi non si assegnano elementi ai suoi elementi.

Se si ha bisogno dell’assegnazione di elementi, è necessario convertire l’oggetto range in oggetto list.

>>> A = [list(range(row)) for _ in range(column)]
>>> A
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]

[0] * N metodo per avviare un array 2D

Un modo pitonico per avviare un array 2-D potrebbe essere

>>> column, row = 3, 5
>>> A = [[0]*row for _ in range(column)]
>>> A
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

Anche se dovremmo essere cauti quando usiamo la moltiplicazione delle liste perché crea semplicemente una sequenza con più volte riferita ad uno stesso oggetto, siamo sollevati ad usare [0]*n qui perché l’oggetto dati 0 è immutabile in modo che non incontreremo mai problemi anche con riferimenti allo stesso oggetto immutabile.

Metodo NumPy per avviare un array 2D

Oltre all’array Python nativo, NumPy dovrebbe essere la migliore opzione per creare un array 2-D, o per essere più precisi, un array.

Si potrebbe creare un array piena di zeri con numpy.zeros.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.zeros(column, row)
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])

Oppure avviare un array riempita con ones con numpy.ones.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.ones((column, row))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])

Si potrebbe anche creare un nuovo array senza inizializzare le voci con numpy.empty.

>>> import numpy as np
>>> column, row = 3, 5
>>> np.empty((5,5))
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,
        1.33511562e-306, 1.89146896e-307],
       [7.56571288e-307, 3.11525958e-307, 1.24610723e-306,
        1.37962320e-306, 1.29060871e-306],
       [2.22518251e-306, 1.33511969e-306, 1.78022342e-306,
        1.05700345e-307, 1.11261027e-306],
       [1.11261502e-306, 1.42410839e-306, 7.56597770e-307,
        6.23059726e-307, 1.42419530e-306],
       [7.56599128e-307, 1.78022206e-306, 8.34451503e-308,
        2.22507386e-306, 7.20705877e+159]])
Note
È una soluzione migliore se si vuole creare prima l’array vuoto e poi assegnare i valori dell’elemento in seguito. Ma siate consapevoli che i valori casuali sono nella matrice, quindi potrebbe essere rischioso se si accede alla matrice indicizzando prima che il valore dell’indice corrispondente sia stato assegnato.
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - Python Array