How to copy an array (matrix) in python ?

Published: March 30, 2019

DMCA.com Protection Status

Examples of how to copy an array in python:

Copy an array with the numpy copy() function

To copy an array in python, a simple solution is to use the numpy function called copy(), example:

 >>> 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])

This function will work for most of the cases except if the array is composed of iterable elements, such as a list for example:

>>> x = np.array([{'a':[1,2,3]}])
>>> y = np.copy(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, 4]}], dtype=object)

Note here that if the y array is modified, the x array will be as well (the function copy() is called a shallow copy).

Copy an array with deepcopy

Another solution that will return an independent copy is to use the deepcopy() function, example:

>>> 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)

Here y array has been modified but not the original array x.

Copy an array using the = operator

WARNING: to copy an array to not use the = operator, since the two arrays will be linked (if one array if modified the other will be too), example:

>>> 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])

Here y is not really a copy of x, it is more like having two names for a same array.

References

Links Site
copy scipy doc
Numpy matrix modified through a copy stackoverflow