Rimodellare Gli Array
Il rimodellamento degli array in NumPy ti consente di cambiare la forma di un array mantenendo tutti gli elementi. È un'operazione comunemente usata nell'apprendimento automatico poiché molte funzioni e metodi delle librerie di apprendimento automatico richiedono che gli array abbiano una forma specifica.
Forme degli Array
Ad esempio, un array 1D di lunghezza 5
ha una forma di (5,)
, mentre un array 2D con 3
righe e 4
colonne ha una forma di (3, 4)
:
import numpy as np array_1d = np.array([5, 7, 1, 10, 9]) array_2d = np.zeros((3, 4)) print(array_1d.shape, array_2d.shape)
ndarray.reshape()
Gli array NumPy hanno un metodo .reshape()
per il rimodellamento. È sufficiente passare la forma dell'array risultante come intero, una tupla di interi, o interi come argomenti separati.
Questo metodo non modifica l'array in loco, ma restituisce un nuovo array.
Nota
In realtà,
.reshape()
restituisce una vista dell'array originale, quindi qualsiasi modifica apportata all'array rimodellato influenzerà anche l'array originale.
import numpy as np # Creating a 1D array from 0 to 11 inclusive array = np.arange(12) # Reshaping the array to a 3x4 2D array (matrix) reshaped_array_2d = array.reshape(3, 4) print(reshaped_array_2d) # Reshaping the array to a 2x2x3 3D array reshaped_array_3d = array.reshape(2, 2, 3) print(reshaped_array_3d)
Nota
Il numero di elementi nell'array rimodellato deve essere lo stesso dell'array originale, quindi non è possibile passare una forma arbitraria.
Nel nostro esempio, rimodellare l'array in una forma di 3 righe e 4 colonne (3 x 4) o in una forma di 2 blocchi, ciascuno contenente 2 righe e 3 colonne (2 x 2 x 3) risulta comunque in un totale di 12 elementi.
Rimodellare con -1
In NumPy, quando si utilizza -1
nel metodo .reshape()
, calcola automaticamente la dimensione di quella dimensione in base alla dimensione dell'array originale, mantenendo lo stesso numero totale di elementi.
Utilizzare .reshape(-1, 1)
è particolarmente utile nel machine learning quando abbiamo bisogno di rimodellare un array 1D in un array 2D con una colonna. Il numero di righe in questo caso è uguale al numero di elementi (calcolato automaticamente).
import numpy as np # Creating a 1D array from 0 to 4 inclusive array = np.arange(5) # Reshaping the array to a 2D array with one column reshaped_array = array.reshape(-1, 1) print(reshaped_array)
L'array rimodellato è memorizzato come un array 2D con 5
righe e 1
colonna, avente la forma (5, 1)
. Al contrario, l'array 1D iniziale ha la forma (5,)
, che è una tupla con un singolo elemento. Per qualsiasi array 1D, la forma è sempre (n,)
, dove n
rappresenta il numero di elementi.
numpy.reshape()
La funzione reshape()
in NumPy è identica al metodo .reshape()
, ma si dovrebbe passare un array come primo argomento. Per il parametro shape
, si può passare una tupla di interi o un singolo intero, ad esempio, np.reshape(array, (3, 4))
:
import numpy as np # Creating a 1D array from 0 to 11 inclusive array = np.arange(12) # Reshaping the array to a 3x4 2D array (matrix) reshaped_array_2d = np.reshape(array, (3, 4)) print(reshaped_array_2d)
Swipe to start coding
Hai un array sales_data_2021
con dati di vendita trimestrali simulati per due prodotti nel 2021. I primi 4 elementi rappresentano le vendite trimestrali per il primo prodotto, e gli ultimi 4 elementi rappresentano le vendite trimestrali per il secondo prodotto.
-
Usa il metodo appropriato di
sales_data_2021
per rimodellarlo in un array 2D. -
La prima riga dovrebbe contenere le vendite trimestrali per il primo prodotto.
-
La seconda riga dovrebbe contenere le vendite trimestrali per il secondo prodotto.
Soluzione
Grazie per i tuoi commenti!