
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.
