Comment copier une matrice en python ?

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