Comment copier une matrice en python ?

Published: 09 mars 2015

DMCA.com Protection Status

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