NumPy Array Copiar vs Ver
La diferencia entre copiar y ver
La principal diferencia entre una copia y una vista de una matriz es que la copia es una nueva matriz y la vista es solo una vista de la matriz original.
La copia posee los datos y cualquier cambio realizado en la copia no afectará la matriz original, y cualquier cambio realizado en la matriz original no afectará a la copia.
La vista no posee los datos y cualquier cambio realizado en la vista afectará a la matriz original, y cualquier cambio realizado en la matriz original afectará a la vista.
COPIAR:
Ejemplo
Haga una copia, cambie la matriz original y muestre ambas matrices:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
arr[0] = 42
print(arr)
print(x)
La copia NO DEBE verse afectada por los cambios realizados en la matriz original.
VISTA:
Ejemplo
Cree una vista, cambie la matriz original y muestre ambas matrices:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
arr[0] = 42
print(arr)
print(x)
La vista DEBERÍA verse afectada por los cambios realizados en la matriz original.
Hacer cambios en la VISTA:
Ejemplo
Cree una vista, cambie la vista y muestre ambas matrices:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.view()
x[0] = 31
print(arr)
print(x)
La matriz original DEBERÍA verse afectada por los cambios realizados en la vista.
Comprobar si la matriz es propietaria de sus datos
Como se mencionó anteriormente, las copias son propietarias de los datos y las vistas no son propietarias de los datos, pero ¿cómo podemos verificar esto?
Cada matriz NumPy tiene el atributo base
que devuelve None
si la matriz posee los datos.
De lo contrario, el base
atributo se refiere al objeto original.
Ejemplo
Imprima el valor del atributo base para verificar si una matriz posee sus datos o no:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
x = arr.copy()
y = arr.view()
print(x.base)
print(y.base)
Vuelve la copia None
.
La vista devuelve la matriz original.