Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kopiering av Matriser | Vanlig Brukte NumPy-funksjoner
Ultimate NumPy

bookKopiering av Matriser

Ofte er det nødvendig å 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 opprette en ny variabel med array_2 = array_1, der array_1 er vår opprinnelige matrise.

123456
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)
copy

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.

Note
Merk

Med array_2 = array_1 oppretter du ikke et nytt array; du oppretter en referanse til det samme arrayet i minnet. Derfor vil alle endringer gjort på array_2 også påvirke array_1.

For å løse dette problemet kunne vi skrevet array_2 = np.array([1, 2, 3]), men det ville bety å skrive den samme koden to ganger. Husk hovedprinsippet i koding: Ikke gjenta deg selv.

ndarray.copy()-metode

Heldigvis har NumPy en ndarray.copy()-metode som løser dette problemet.

12345678
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}')
copy

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 arrayet som parameter: array_2 = np.copy(array_1).

Både funksjonen og metoden fungerer likt; det er imidlertid én nyanse. Begge har parameteren order, som spesifiserer minnelayouten til arrayet, men standardverdiene deres er forskjellige.

Bildet under viser strukturen til sales_data_2021-arrayet brukt i oppgaven:

Oppgave

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, der hver rad representerer et spesifikt produkt, og hver kolonne representerer kvartalssalget for det produktet.

  1. Lag en kopi av sales_data_2021 ved å bruke riktig metode for en NumPy-array og lagre den i sales_data_2022.
  2. Oppdater de to siste elementene i første rad (som representerer et produkts kvartalssalg) i sales_data_2022 til 390 og 370:
    • Bruk en positiv indeks for å spesifisere raden;
    • Bruk et utsnitt med kun en negativ start-verdi for å indeksere de to siste elementene.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

close

Awesome!

Completion rate improved to 3.7

bookKopiering av Matriser

Sveip for å vise menyen

Ofte er det nødvendig å 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 opprette en ny variabel med array_2 = array_1, der array_1 er vår opprinnelige matrise.

123456
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)
copy

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.

Note
Merk

Med array_2 = array_1 oppretter du ikke et nytt array; du oppretter en referanse til det samme arrayet i minnet. Derfor vil alle endringer gjort på array_2 også påvirke array_1.

For å løse dette problemet kunne vi skrevet array_2 = np.array([1, 2, 3]), men det ville bety å skrive den samme koden to ganger. Husk hovedprinsippet i koding: Ikke gjenta deg selv.

ndarray.copy()-metode

Heldigvis har NumPy en ndarray.copy()-metode som løser dette problemet.

12345678
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}')
copy

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 arrayet som parameter: array_2 = np.copy(array_1).

Både funksjonen og metoden fungerer likt; det er imidlertid én nyanse. Begge har parameteren order, som spesifiserer minnelayouten til arrayet, men standardverdiene deres er forskjellige.

Bildet under viser strukturen til sales_data_2021-arrayet brukt i oppgaven:

Oppgave

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, der hver rad representerer et spesifikt produkt, og hver kolonne representerer kvartalssalget for det produktet.

  1. Lag en kopi av sales_data_2021 ved å bruke riktig metode for en NumPy-array og lagre den i sales_data_2022.
  2. Oppdater de to siste elementene i første rad (som representerer et produkts kvartalssalg) i sales_data_2022 til 390 og 370:
    • Bruk en positiv indeks for å spesifisere raden;
    • Bruk et utsnitt med kun en negativ start-verdi for å indeksere de to siste elementene.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
single

single

some-alt