Omforma Arrayer
Omformning av arrayer i NumPy gör att du kan ändra formen på en array samtidigt som alla element bevaras. Det är en vanligt använd operation inom maskininlärning eftersom många funktioner och metoder i maskininlärningsbibliotek kräver att arrayer har en specifik form.
Arrayformer
Till exempel, en 1D-array med längden 5
har formen (5,)
, medan en 2D-array med 3
rader och 4
kolumner har formen (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()
NumPy-arrayer har en .reshape()
-metod för att ändra form. Du behöver bara ange formen på den resulterande arrayen antingen som ett heltal, en tupl av heltal, eller heltal som separata argument.
Denna metod modifierar inte arrayen på plats, utan returnerar en ny array.
Notera
Faktum är att
.reshape()
returnerar en vy av den ursprungliga arrayen, så eventuella ändringar som görs på den omformade arrayen kommer också att påverka den ursprungliga arrayen.
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)
Note
Antalet element i den omformade arrayen måste vara detsamma som i den ursprungliga arrayen, så du kan inte använda en godtycklig form.
I vårt exempel, att omforma arrayen till en form av 3 rader och 4 kolumner (3 x 4) eller till en form av 2 block, varje innehållande 2 rader och 3 kolumner (2 x 2 x 3) resulterar fortfarande i totalt 12 element.
Omformning med -1
I NumPy, när du använder -1
i .reshape()
-metoden, beräknar den automatiskt storleken på den dimensionen baserat på den ursprungliga arrayens storlek, samtidigt som det totala antalet element förblir detsamma.
Att använda .reshape(-1, 1)
är särskilt användbart inom maskininlärning när vi behöver omforma en 1D-array till en 2D-array med en kolumn. Antalet rader i detta fall är lika med antalet element (beräknas automatiskt).
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)
Den omformade arrayen lagras som en 2D-array med 5
rader och 1
kolumn, med formen (5, 1)
. I kontrast har den ursprungliga 1D-arrayen formen (5,)
, vilket är en tupl med ett enda element. För vilken 1D-array som helst är formen alltid (n,)
, där n
representerar antalet element.
numpy.reshape()
Funktionen reshape()
i NumPy är identisk med .reshape()
-metoden, men du bör skicka en array som dess första argument. För shape
-parametern kan du skicka antingen en tupl av heltal eller ett enda heltal, t.ex. 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
Du har en sales_data_2021
array med simulerad kvartalsförsäljningsdata för två produkter under 2021. De första 4 elementen representerar kvartalsförsäljningen för den första produkten, och de sista 4 elementen representerar kvartalsförsäljningen för den andra produkten.
-
Använd den lämpliga metoden för
sales_data_2021
för att omforma den till en 2D-array. -
Den första raden ska innehålla kvartalsförsäljningen för den första produkten.
-
Den andra raden ska innehålla kvartalsförsäljningen för den andra produkten.
Lösning
Tack för dina kommentarer!