Mientras trabajaba con NumPy , es posible que haya visto que algunas funciones devuelven la copia, mientras que otras funciones devuelven la vista. La principal diferencia entre copiar y ver es que la copia es la nueva array, mientras que la vista es la vista de la array original. En otras palabras, se puede decir que la copia se almacena físicamente en otra ubicación y la vista tiene la misma ubicación de memoria que la array original.
Sin copia: las asignaciones normales no hacen la copia de un objeto de array. En cambio, usa exactamente la misma identificación de la array original para acceder a ella. Además, cualquier cambio en cualquiera se refleja en el otro.
Ejemplo:
(No Copia por Asignación)
import numpy as np # creating array arr = np.array([2, 4, 6, 8, 10]) # assigning arr to nc nc = arr # both arr and nc have same id print("id of arr", id(arr)) print("id of nc", id(nc)) # updating nc nc[0]= 12 # printing the values print("original array- ", arr) print("assigned array- ", nc)
Producción:
id of arr 26558736 id of nc 26558736 original array- [12 4 6 8 10] assigned array- [12 4 6 8 10]
Vista: Esto también se conoce como copia superficial. La vista es solo una vista de la array original y la vista no posee los datos. Cuando realizamos cambios en la vista, afecta la array original, y cuando se realizan cambios en la array original, afecta la vista.
Ejemplo: (hacer una vista y cambiar la array original)
import numpy as np # creating array arr = np.array([2, 4, 6, 8, 10]) # creating view v = arr.view() # both arr and v have different id print("id of arr", id(arr)) print("id of v", id(v)) # changing original array # will effect view arr[0] = 12 # printing array and view print("original array- ", arr) print("view- ", v)
id of arr 30480448 id of v 30677968 original array- [12 4 6 8 10] view- [12 4 6 8 10]
Copia: Esto también se conoce como copia profunda. La copia es una array completamente nueva y la copia posee los datos. Cuando realizamos cambios en la copia, no afecta la array original, y cuando se realizan cambios en la array original, no afecta la copia.
Ejemplo: (hacer una copia y cambiar la array original)
import numpy as np # creating array arr = np.array([2, 4, 6, 8, 10]) # creating copy of array c = arr.copy() # both arr and c have different id print("id of arr", id(arr)) print("id of c", id(c)) # changing original array # this will not effect copy arr[0] = 12 # printing array and copy print("original array- ", arr) print("copy- ", c)
Producción:
id of arr 35406048 id of c 32095936 original array- [12 4 6 8 10] copy- [ 2 4 6 8 10]
Array que posee sus datos:
para verificar si la array posee sus datos en vista y copia, podemos usar el hecho de que cada array NumPy tiene la base de atributos que devuelve Ninguno si la array posee los datos. De lo contrario, el atributo base se refiere al objeto original.
Ejemplo:
import numpy as np # creating array arr = np.array([2, 4, 6, 8, 10]) # creating copy of array c = arr.copy() # creating view of array v = arr.view() # printing base attribute of copy and view print(c.base) print(v.base)
Producción:
None [ 2 4 6 8 10]
Publicación traducida automáticamente
Artículo escrito por ashishguru9803 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA