Kopiering af Arrays
Ofte har du brug for at lave en kopi af en array for at foretage ændringer uden at påvirke den oprindelige array.
Enkel Tildeling
Først vil vi diskutere, hvorfor vi ikke blot kan oprette en anden variabel ved hjælp af array_2 = array_1
, hvor array_1
er vores oprindelige array.
import numpy as np array_1 = np.array([1, 2, 3]) array_2 = array_1 # Setting the first element of array_2 to 10 array_2[0] = 10 print(array_1)
Vi ændrede værdien af det første element i array_2
til 10
, men denne tildeling ændrede også værdien af det første element i array_1
til 10
.
Bemærk
Med
array_2 = array_1
opretter du ikke et nyt array; i stedet opretter du en reference til det samme array i hukommelsen. Som et resultat vil enhver ændring foretaget påarray_2
også påvirkearray_1
.
For at løse dette problem kunne vi skrive array_2 = np.array([1, 2, 3])
, men det ville betyde at skrive den samme kode to gange. Husk det nøgleprincip i kodning: Gentag dig ikke selv.
ndarray.copy() Metode
Heldigvis har NumPy en ndarray.copy()
metode som en løsning på dette problem.
import numpy as np array_1 = np.array([1, 2, 3]) # Copying the contents of array_1 array_2 = array_1.copy() # Setting the first element of array_2 to 10 array_2[0] = 10 print(f'Initial array: {array_1}') print(f'Modified copy: {array_2}')
Nu har vi oprettet et nyt array for array_2
med de samme elementer som array_1
.
For 2D arrays, the copying procedure is exactly the same.
numpy.copy() Funktion
I stedet for .copy()
metoden, kan vi også bruge copy()
funktionen, som tager arrayet som sin parameter: array_2 = np.copy(array_1)
.
Både funktionen og metoden fungerer på samme måde; dog er der en nuance. De har begge parameteren order
, som specificerer arrayets hukommelseslayout, men deres standardværdier er forskellige.
Billedet nedenfor viser strukturen af sales_data_2021
arrayet brugt i opgaven:
Swipe to start coding
Du analyserer kvartalsvise salgsdata for en virksomhed for året 2021. Dataene er gemt i en NumPy-array ved navn sales_data_2021
, hvor hver række repræsenterer et specifikt produkt, og hver kolonne repræsenterer de kvartalsvise salg for det produkt.
-
Opret en kopi af
sales_data_2021
ved hjælp af den passende metode for en NumPy-array og gem den isales_data_2022
. -
Opdater de sidste to elementer i den første række (der repræsenterer et produkts kvartalsvise salg) i
sales_data_2022
til 390 og 370:- Brug en positiv indeks til at specificere rækken;
- Brug en slice med kun en negativ
start
værdi til at indeksere de sidste to elementer.
Løsning
Tak for dine kommentarer!