Copia y Vista en NumPy

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este tutorial, aprenderá sobre los conceptos de copia y vista para los ndarray en la biblioteca NumPy. Aprenderá cómo usar las funciones copy() y view() para crear una nueva copia de una matriz existente o crear una nueva vista para la matriz. También aprenderá la diferencia entre copia y vista y cómo se comportan de manera diferente.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Comprendiendo la Diferencia entre Copia y Vista

La principal diferencia entre una copia y una vista es que la función copy() crea una nueva matriz, mientras que la función view() crea una nueva vista de la matriz original. Cuando creamos una nueva copia de la matriz de entrada, se almacena en una ubicación diferente de la memoria, pero cuando creamos una vista, apunta a la misma ubicación de memoria que la matriz original. Esto significa que cualquier cambio realizado en la copia de la matriz de entrada no afectará a la matriz original, y viceversa. Sin embargo, cualquier cambio realizado en la vista afectará a la matriz original, y viceversa.

No hay Copia ni Asignación de Matriz

Si asigna una matriz de NumPy a otra matriz, no crea una copia directa de la matriz original. En cambio, crea otra matriz con el mismo contenido e ID, que se convierte en una referencia a la matriz original. Si realiza cualquier cambio en esta matriz de referencia, esos cambios se reflejan directamente en la matriz original.

import numpy as np

input_arr = np.array([[5,2,7,4],[9,0,2,3],[1,2,3,19]])
print("La Matriz Original es :\n")
print(input_arr)
print("\nEl ID de la matriz a:")
print(id(input_arr))

b = input_arr #asignando input_arr a b
print("\nAhora hacemos la copia de la input_arr")
print("\nEl ID de b:")
print(id(b))
b.shape = 4, 3 #haciendo algunos cambios en b
print("\nLos Cambios en b también se reflejan en a:")
print(input_arr)

Copia Profunda o Copia en Numpy

Cuando creamos una copia utilizando la función copy(), también se conoce como copia profunda. La copia de la matriz posee los datos, lo que significa que cualquier cambio realizado en la copia no afectará a la matriz original, y viceversa.

Para realizar una copia profunda de la matriz de entrada, podemos utilizar la función numpy.ndarray.copy().

import numpy as np

## Vamos a crear una matriz
a = np.array([5, 4, 6, 8, 9])

## Vamos a crear la copia de la matriz de entrada
c = a.copy()

## Ahora vamos a comprobar el id de a y c
print("El id de la matriz de entrada a:")
print(id(a))
print("El id de c es:")
print(id(c))

## Ahora cambiamos la matriz original
a[0] = 25

## Imprimiendo tanto la matriz de entrada como la copia
print("La matriz original:")
print(a)
print("La copia es:")
print(c)

Vista en Numpy o Copia Superficial

Cuando creamos una vista de una matriz, también se conoce como una copia superficial. La vista solo apunta a la matriz original y no posee los datos. Esto significa que cualquier cambio realizado en la vista afectará a la matriz original, y viceversa.

Para crear una vista de la matriz de entrada, podemos utilizar la función numpy.ndarray.view().

import numpy as np

## matriz de entrada dada
ar = np.array([2, 4, 6, 8, 10, 12])

## creando la vista
v = ar.view()

## Ahora tanto ar como v tendrán un id diferente
print("El id de ar")
print(id(ar))
print("El id de v")
print(id(v))

## cambiar la matriz original también afectará la vista
ar[3] = 16

## imprimiendo tanto la matriz como la vista
print("La matriz original:")
print(ar)
print("La vista:")
print(v)

Resumen

En este tutorial, has aprendido sobre los conceptos de copia y vista para los ndarray en la biblioteca NumPy. Has aprendido cómo utilizar las funciones copy() y view() para crear una nueva copia de una matriz existente o crear una nueva vista para la matriz. También has aprendido la diferencia entre copia y vista y cómo se comportan de manera diferente. Te recomendamos practicar estos conceptos con más ejemplos.