Skip to content

Convertire array 1D in array 2D in Python (numpy.ndarray, list)

Python

Questo articolo spiega come ottenere un array unidimensionale in un array bidimensionale in Python, sia per gli array NumPy ndarray che per l’elenco di elenchi integrato.

  • Converti un numpy.ndarray unidimensionale in un numpy.ndarray bidimensionale
  • Converti un elenco unidimensionale in un elenco bidimensionale

Al, vedere il seguente articolo su come contrario (= appiattire) una matrice multidimensionale in una matrice unidimensionale.

Converti un numpy.ndarray unidimensionale in un numpy.ndarray bidimensionale

Usa il metodo reshape() per trasformare la forma di un array NumPy ndarray. È possibile trasformare di forma, non limitata alla trasformazione da un array unidimensionale a un array bidimensionale.

utilizzando -1, la dimensione della dimensione viene calcolata automaticamente.

import numpy as np

a = np.arange(6)
print(a)
# [0 1 2 3 4 5]

print(a.reshape(2, 3))
# [[0 1 2]
#  [3 4 5]]

print(a.reshape(-1, 3))
# [[0 1 2]
#  [3 4 5]]

print(a.reshape(2, -1))
# [[0 1 2]
#  [3 4 5]]

Se si specifica una forma che non può essere convertita, viene generato un errore.

# print(a.reshape(3, 4))
# ValueError: cannot reshape array of size 6 into shape (3,4)

# print(a.reshape(-1, 4))
# ValueError: cannot reshape array of size 6 into shape (4)

Converti un elenco unidimensionale in un elenco bidimensionale

Con NumPy

Con NumPy, puoi rimuovere list in numpy.ndarray e trasforma la forma con reshape(), quindi restituirla a list.

l = [0, 1, 2, 3, 4, 5]

print(np.array(l).reshape(-1, 3).tolist())
# [[0, 1, 2], [3, 4, 5]]

print(np.array(l).reshape(3, -1).tolist())
# [[0, 1], [2, 3], [4, 5]]

Il seguente articolo su come vedere numpy.ndarray e elencare l’un l’altro.

Senza NumPy

Senza NumPy, puoi usare le comprensioni degli elenchi, i range() e le sezioni come segue.

def convert_1d_to_2d(l, cols):
    return [l[i:i + cols] for i in range(0, len(l), cols)]

l = [0, 1, 2, 3, 4, 5]

print(convert_1d_to_2d(l, 2))
# [[0, 1], [2, 3], [4, 5]]

print(convert_1d_to_2d(l, 3))
# [[0, 1, 2], [3, 4, 5]]

print(convert_1d_to_2d(l, 4))
# [[0, 1, 2, 3], [4, 5]]

Il primo argomento è l’elenco originale e il secondo argomento è il numero di elementi dell’elenco interno (= numero di colonne). Se c’è un resto, verrà memorizzata una lista con un numero di elementi diversi, come nell’ultimo esempio.

Se vuoi specificare il numero di righe:

def convert_1d_to_2d_rows(l, rows):
    return convert_1d_to_2d(l, len(l) // rows)

print(convert_1d_to_2d_rows(l, 2))
# [[0, 1, 2], [3, 4, 5]]

print(convert_1d_to_2d_rows(l, 3))
# [[0, 1], [2, 3], [4, 5]]

print(convert_1d_to_2d_rows(l, 4))
# [[0], [1], [2], [3], [4], [5]]

La funzione in questo esempio è solo semplice. Se non divisibile, il risultato è diverso dal numero di righe specificato, come nell’ultimo esempio.