Cópia e Visualização (View) em NumPy

Beginner

Introdução

Neste tutorial, você aprenderá sobre os conceitos de cópia (copy) e visualização (view) para ndarrays na biblioteca NumPy. Você aprenderá como usar as funções copy() e view() para criar uma nova cópia de um array existente ou criar uma nova visualização para o array. Você também aprenderá a diferença entre cópia e visualização e como elas se comportam de maneira diferente.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido às limitações do Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Entendendo a Diferença entre Cópia (Copy) e Visualização (View)

A principal diferença entre cópia (copy) e visualização (view) é que a função copy() cria um novo array, enquanto a função view() cria uma nova visualização do array original. Quando criamos uma nova cópia do array de entrada, ela é armazenada em um local diferente na memória, mas quando criamos uma visualização, ela aponta para o mesmo local de memória do array original. Isso significa que quaisquer alterações feitas na cópia do array de entrada não afetarão o array original, e vice-versa. No entanto, quaisquer alterações feitas na visualização afetarão o array original, e vice-versa.

Sem Cópia ou Atribuição de Array

Se você atribuir um array NumPy a outro array, isso não cria uma cópia direta do array original. Em vez disso, ele cria outro array com o mesmo conteúdo e ID, que se torna uma referência ao array original. Se você fizer alguma alteração neste array de referência, elas serão refletidas diretamente no array original.

import numpy as np

input_arr = np.array([[5,2,7,4],[9,0,2,3],[1,2,3,19]])
print("The Original Array is :\n")
print(input_arr)
print("\nThe ID of array a:")
print(id(input_arr))

b = input_arr #assigning input_arr to b
print("\nNow we make the copy of the input_arr")
print("\nThe ID of b:")
print(id(b))
b.shape = 4, 3 #making some changes to b
print("\nThe Changes on b also reflect to a:")
print(input_arr)

Cópia Numpy ou Deep Copy

Quando criamos uma cópia usando a função copy(), ela também é conhecida como cópia profunda (deep copy). A cópia do array possui os dados, o que significa que quaisquer alterações feitas na cópia não afetarão o array original, e vice-versa.

Para fazer uma cópia profunda do array de entrada, podemos usar a função numpy.ndarray.copy().

import numpy as np

## Let us create an array
a = np.array([5, 4, 6, 8, 9])

#Let us create the copy of input array
c = a.copy()

#Now let us check the id of a and c
print("The id of input array a:")
print(id(a))
print("The id of c is:")
print(id(c))

#Now changing the original array
a[0] = 25

## printing both input array and copy
print("The original array:")
print(a)
print("The copy is:")
print(c)

Numpy View ou Shallow Copy

Quando criamos uma visualização (view) de um array, ela também é conhecida como cópia superficial (shallow copy). A visualização (view) apenas aponta para o array original e não possui os dados. Isso significa que quaisquer alterações feitas na visualização (view) afetarão o array original, e vice-versa.

Para criar uma visualização (view) do array de entrada, podemos usar a função numpy.ndarray.view().

import numpy as np

## given input array
ar = np.array([2, 4, 6, 8, 10, 12])

## creating the view
v = ar.view()

## Now both arr and v will have different id
print("The id of ar")
print(id(ar))
print("The id of v")
print(id(v))

## changing the original array will also effect view
ar[3] = 16

## printing both array and view
print("The original array:")
print(ar)
print("The view:")
print(v)

Resumo

Neste tutorial, você aprendeu sobre os conceitos de cópia (copy) e visualização (view) para ndarrays na biblioteca NumPy. Você aprendeu como usar as funções copy() e view() para criar uma nova cópia de um array existente ou criar uma nova visualização (view) para o array. Você também aprendeu a diferença entre cópia (copy) e visualização (view) e como elas se comportam de maneira diferente. Recomendamos praticar esses conceitos com exemplos adicionais.