Copiar e ler uma matriz com NumPy
Quando é feita uma copia de uma matriz, qualquer alteração feita nessa matriz não afeta a original. E quando a matriz é acessada o seu conteúdo fica intacto, sem alterações. Os objetos da biblioteca numpy tem os métodos copy e view. O método copy faz uma copia da matriz e retorna uma nova matriz. Já o método view monstra a matriz do objeto, sem alterá-lo ou criar um novo.
Exemplo
Com esse exemplo é possível perceber que alterando a cópia da matriz, que foi feita com o método copy, as alterações não afetam a matriz original. As alterações são feitas apenas na cópia da matriz, que é uma matriz independente. O que não ocorre com o método view.
import numpy as np
matriz = np.array([1, 2, 3])
copia_matriz = matriz.copy()
copia_matriz[0] = 42
print('Matriz original: ', matriz)
print('Cópia da matriz: ', copia_matriz)
matriz = np.array([1, 2, 3])
copia_matriz = matriz.copy()
copia_matriz[0] = 42
print('Matriz original: ', matriz)
print('Cópia da matriz: ', copia_matriz)
Exemplo
O método view apenas torna possível acessar a mesma matriz com duas variáveis diferentes. Na pratica a nova variável se torna apenas uma apelido para a matriz. Todas as alterações feitas na matriz original afetam o seu “apelido” e vice-versa.
import numpy as np
matriz = np.array([1, 2, 3])
mesma_matriz = matriz.view()
mesma_matriz[0] = 42
print('Matriz original: ', matriz)
print('Cópia da matriz: ', mesma_matriz)
matriz = np.array([1, 2, 3])
mesma_matriz = matriz.view()
mesma_matriz[0] = 42
print('Matriz original: ', matriz)
print('Cópia da matriz: ', mesma_matriz)
Como saber se um objeto da classe numpy tem dados ou não?
É possível saber se um objeto tem dados ou é só um apelido para um objeto com o atributo base. Se um objeto tiver dados o valor do atributo base vai ser None. E se não tiver o valor retornado será o conteúdo da matriz.
Exemplo
Com o método copy o valor do atributo base será None e com o método view o valor será o conteúdo da matriz base.
import numpy as np
matriz = np.array([1, 2, 3])
a = matriz.copy()
b = matriz.view()
print('Cópia de um objeto (Tem dados): ', a.base)
print('Apelido de um objeto (Não tem dados): ', b.base)
print('Objeto (Tem dados): ', matriz.base)
matriz = np.array([1, 2, 3])
a = matriz.copy()
b = matriz.view()
print('Cópia de um objeto (Tem dados): ', a.base)
print('Apelido de um objeto (Não tem dados): ', b.base)
print('Objeto (Tem dados): ', matriz.base)
0 comentários:
Postar um comentário