Kopiere Matriser
Ofte trenger du å lage en kopi av en matrise for å gjøre endringer uten å påvirke den opprinnelige matrisen.
Enkel tildeling
Først skal vi diskutere hvorfor vi ikke bare kan lage en annen variabel ved å bruke array_2 = array_1
, hvor array_1
er vår opprinnelige matrise.
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 endret verdien til det første elementet i array_2
til 10
, men denne tildelingen endret også verdien til det første elementet i array_1
til 10
.
Merk
Med
array_2 = array_1
, oppretter du ikke en ny array; i stedet oppretter du en referanse til den samme arrayen i minnet. Som et resultat vil alle endringer gjort iarray_2
også påvirkearray_1
.
For å løse dette problemet, kunne vi skrive array_2 = np.array([1, 2, 3])
, men det ville bety å skrive den samme koden to ganger. Husk nøkkelprinsippet i koding: Ikke gjenta deg selv.
ndarray.copy() Metode
Heldigvis har NumPy en ndarray.copy()
metode som en løsning på dette problemet.
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}')
Nå har vi opprettet en ny array for array_2
med de samme elementene som array_1
.
For 2D-arrayer er kopieringsprosedyren nøyaktig den samme.
numpy.copy() Funksjon
I stedet for .copy()
metoden, kan vi også bruke copy()
funksjonen, som tar arrayen som sin parameter: array_2 = np.copy(array_1)
.
Både funksjonen og metoden fungerer likt; det er imidlertid en nyanse. De har begge order
-parameteren, som spesifiserer minneoppsettet til arrayen, men deres standardverdier er forskjellige.
Bildet nedenfor viser strukturen til sales_data_2021
-arrayen brukt i oppgaven:
Swipe to start coding
Du analyserer kvartalsvise salgsdata for et selskap for året 2021. Dataene er lagret i en NumPy-array kalt sales_data_2021
, hvor hver rad representerer et spesifikt produkt, og hver kolonne representerer kvartalsvise salg for det produktet.
-
Lag en kopi av
sales_data_2021
ved å bruke den passende metoden for en NumPy-array og lagre den isales_data_2022
. -
Oppdater de to siste elementene i første rad (som representerer et produkts kvartalsvise salg) i
sales_data_2022
til 390 og 370:- Bruk en positiv indeks for å spesifisere raden;
- Bruk en slice med kun en negativ
start
-verdi for å indeksere de to siste elementene.
Løsning
Takk for tilbakemeldingene dine!