Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Arrays Kopiëren | Veelgebruikte NumPy-Functies
Ultieme NumPy

book
Arrays Kopiëren

Vaak moet je een kopie van een array maken om wijzigingen aan te brengen zonder de originele array te beïnvloeden.

Eenvoudige Toewijzing

Eerst bespreken we waarom we niet eenvoudigweg een andere variabele kunnen maken met array_2 = array_1, waarbij array_1 onze originele array is.

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

We hebben de waarde van het eerste element van array_2 veranderd naar 10, maar deze toewijzing veranderde ook de waarde van het eerste element van array_1 naar 10.

Opmerking

Met array_2 = array_1, creëer je geen nieuwe array; in plaats daarvan creëer je een referentie naar dezelfde array in het geheugen. Als gevolg daarvan zullen alle wijzigingen die in array_2 worden aangebracht, ook array_1 beïnvloeden.

Om dit probleem op te lossen, zouden we array_2 = np.array([1, 2, 3]) kunnen schrijven, maar dat zou betekenen dat we dezelfde code tweemaal schrijven. Onthoud het sleutelprincipe in coderen: Herhaal jezelf niet.

ndarray.copy() Methode

Gelukkig heeft NumPy een ndarray.copy() methode als oplossing voor dit probleem.

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

Nu hebben we een nieuwe array voor array_2 gemaakt met dezelfde elementen als array_1.

Voor 2D arrays is de kopieerprocedure precies hetzelfde.

numpy.copy() Functie

In plaats van de .copy() methode, kunnen we ook de copy() functie gebruiken, die de array als parameter neemt: array_2 = np.copy(array_1).

Zowel de functie als de methode werken hetzelfde; er is echter één nuance. Ze hebben beide de order parameter, die de geheugenindeling van de array specificeert, maar hun standaardwaarden zijn verschillend.

De onderstaande afbeelding toont de structuur van de sales_data_2021 array die in de taak wordt gebruikt:

Taak

Swipe to start coding

Je analyseert de kwartaalverkoopgegevens van een bedrijf voor het jaar 2021. De gegevens zijn opgeslagen in een NumPy-array genaamd sales_data_2021, waarbij elke rij een specifiek product vertegenwoordigt en elke kolom de kwartaalverkoop voor dat product vertegenwoordigt.

  1. Maak een kopie van sales_data_2021 met behulp van de juiste methode van een NumPy-array en sla deze op in sales_data_2022.

  2. Werk de laatste twee elementen van de eerste rij (die de kwartaalverkoop van een product vertegenwoordigt) in sales_data_2022 bij naar 390 en 370:

    • Gebruik een positieve index om de rij te specificeren;
    • Gebruik een slice met alleen een negatieve start waarde om de laatste twee elementen te indexeren.

Oplossing

import numpy as np
# Simulated quarterly sales data for two products in 2021
sales_data_2021 = np.array([[350, 420, 380, 410], [270, 320, 290, 310]])
# Create a copy of sales_data_2021
sales_data_2022 = sales_data_2021.copy()
# Assign the NumPy array with elements 390 and 370 to the correct slice
sales_data_2022[0, -2:] = np.array([390, 370])
print(f'Quarterly sales in 2021:\n{sales_data_2021}')
print(f'Quarterly sales in 2022:\n{sales_data_2022}')

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
import numpy as np
# Simulated quarterly sales data for two products in 2021
sales_data_2021 = np.array([[350, 420, 380, 410], [270, 320, 290, 310]])
# Create a copy of sales_data_2021
sales_data_2022 = ___
# Assign the NumPy array with elements 390 and 370 to the correct slice
sales_data_2022[___, ___] = ___.___([___, ___])
print(f'Quarterly sales in 2021:\n{sales_data_2021}')
print(f'Quarterly sales in 2022:\n{sales_data_2022}')
toggle bottom row
some-alt