NumPy Array Copy vs View
La differenza tra copia e visualizzazione
La differenza principale tra una copia e una visualizzazione di un array è che la copia è un nuovo array e la visualizzazione è solo una visualizzazione dell'array originale.
La copia possiede i dati e qualsiasi modifica apportata alla copia non influirà sull'array originale e qualsiasi modifica apportata all'array originale non influirà sulla copia.
La vista non possiede i dati e tutte le modifiche apportate alla vista influiranno sulla matrice originale e tutte le modifiche apportate alla matrice originale influiranno sulla vista.
COPIA:
Esempio
Crea una copia, cambia l'array originale e visualizza entrambi gli array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
La copia NON DEVE essere influenzata dalle modifiche apportate all'array originale.
VISUALIZZA:
Esempio
Crea una vista, cambia l'array originale e visualizza entrambi gli array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42
print(arr)
print(x)
La vista DOVREBBE essere influenzata dalle modifiche apportate alla matrice originale.
Apporta modifiche nella VIEW:
Esempio
Crea una vista, cambia la vista e mostra entrambi gli array:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
L'array originale DOVREBBE essere influenzato dalle modifiche apportate alla vista.
Controlla se l'array possiede i suoi dati
Come accennato in precedenza, le copie possiedono i dati e le visualizzazioni non possiedono i dati, ma come possiamo verificarlo?
Ogni array NumPy ha l'attributo base
che restituisce None
se l'array possiede i dati.
In caso contrario, l' base
attributo si riferisce all'oggetto originale.
Esempio
Stampa il valore dell'attributo di base per verificare se un array possiede i suoi dati o meno:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
La copia ritorna None
.
La vista restituisce l'array originale.