Exemples de comment copier une matrice en python
Copier une matrice avec la fonction numpy copy()
Pour copier une matrice, une solution simple est d'utiliser la fonction numpy copy(), exemple:
>>> import numpy as np
>>> x = np.array([1, 2, 3, 4])
>>> y = np.copy(x)
>>> y[1] = 7
>>> y
array([1, 7, 3, 4])
>>> x
array([1, 2, 3, 4])
Cependant il est important de savoir que dans le cas ou la matrice est composée d'éléments itérables comme dans cet exemple:
>>> x = np.array([{'a':[1,2,3]}])
>>> y = np.copy(x)
>>> y
array([{'a': [1, 2, 3]}], dtype=object)
alors si on modifie la matrice y alors x est modifiée également (et inversement), la fonction copy() est une "shallow copy":
>>> y[0]['a'].append(4)
>>> y
array([{'a': [1, 2, 3, 4]}], dtype=object)
>>> x
array([{'a': [1, 2, 3, 4]}], dtype=object)
Copier une matrice avec la fonction deepcopy
Une autre solution est d'utiliser la fonction deepcopy():
>>> import copy
>>> x = np.array([{'a':[1,2,3]}])
>>> y = copy.deepcopy(x)
>>> y
array([{'a': [1, 2, 3]}], dtype=object)
>>> y[0]['a'].append(4)
>>> y
array([{'a': [1, 2, 3, 4]}], dtype=object)
>>> x
array([{'a': [1, 2, 3]}], dtype=object)
si on modifie la matrice y alors x n'est pas modifiée.
Copier une matrice avec l'opérateur =
Attention: pour copier une matrice il ne faut pas utiliser l'opérateur = car les deux matrices seront alors liées (si on modifie une matrice l'autre est modifiée également)
>>> import numpy as np
>>> x = np.array([1, 2, 3, 4])
>>> y = x
>>> y
array([1, 2, 3, 4])
>>> y[1] = 7
>>> y
array([1, 7, 3, 4])
>>> x
array([1, 7, 3, 4])
Avec l'opérateur = on ne copie pas vraiment la matrice, c'est plutôt comme une même matrice avec deux noms.
Références
Liens | Site |
---|---|
copy | scipy doc |
Numpy matrix modified through a copy | stackoverflow |