Copia degli Array
Spesso, è necessario creare una copia di un array per apportare modifiche senza influenzare l'array originale.
Assegnazione Semplice
Per prima cosa, discuteremo perché non possiamo semplicemente creare un'altra variabile usando array_2 = array_1
, dove array_1
è il nostro array originale.
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)
Abbiamo cambiato il valore del primo elemento di array_2
a 10
, ma questa assegnazione ha anche cambiato il valore del primo elemento di array_1
a 10
.
Nota
Con
array_2 = array_1
, non stai creando un nuovo array; invece, stai creando un riferimento allo stesso array in memoria. Di conseguenza, qualsiasi modifica apportata aarray_2
influenzerà anchearray_1
.
Per risolvere questo problema, potremmo scrivere array_2 = np.array([1, 2, 3])
, ma ciò significherebbe scrivere lo stesso codice due volte. Ricorda il principio chiave nella programmazione: Non ripeterti.
Metodo ndarray.copy()
Fortunatamente, NumPy ha un metodo ndarray.copy()
come soluzione a questo problema.
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}')
Ora, abbiamo creato un nuovo array per array_2
con gli stessi elementi di array_1
.
Per array 2D, la procedura di copia è esattamente la stessa.
Funzione numpy.copy()
Invece del metodo .copy()
, possiamo anche usare la funzione copy()
, che prende l'array come parametro: array_2 = np.copy(array_1)
.
Sia la funzione che il metodo funzionano allo stesso modo; tuttavia, c'è una sfumatura. Entrambi hanno il parametro order
, che specifica il layout di memoria dell'array, ma i loro valori predefiniti sono diversi.
L'immagine sotto mostra la struttura dell'array sales_data_2021
utilizzato nel compito:
Swipe to start coding
Stai analizzando i dati di vendita trimestrali di un'azienda per l'anno 2021. I dati sono memorizzati in un array NumPy chiamato sales_data_2021
, dove ogni riga rappresenta un prodotto specifico e ogni colonna rappresenta le vendite trimestrali per quel prodotto.
-
Crea una copia di
sales_data_2021
utilizzando il metodo appropriato di un array NumPy e memorizzala insales_data_2022
. -
Aggiorna gli ultimi due elementi della prima riga (che rappresenta le vendite trimestrali di un prodotto) in
sales_data_2022
a 390 e 370:- Usa un indice positivo per specificare la riga;
- Usa uno slice con solo un valore
start
negativo per indicizzare gli ultimi due elementi.
Soluzione
Grazie per i tuoi commenti!