Copiar y ver en NumPy Array

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *