Reputation: 11
The problem I have is that when I send an array (array "a" in code below) to a function ("summation" in code below), then assign it to another array (array "d" in code below), any change in elements of array "d" is reflected on array "a" as well.
from numpy import *
def summation(a,b):
a_row = len(a[:,1])
b_row=len(a[1,:])
d = a
for i in range(a_row):
for j in range(a_col):
d[i,j]=d[i,j]+b[i,j]
return d
def define():
a = array([[1,2,3,4,5],[6,7,8,9,10]])
b = array([[11,12,13,14,15],[16,17,18,19,20]])
z=summation(a,b)
print a
print b
print z
define()
So when I run this code, the output is:
[[12 14 16 18 20]
[22 24 26 28 30]]
[[11 12 13 14 15]
[16 17 18 19 20]]
[[12 14 16 18 20]
[22 24 26 28 30]]
I would like "a" to be untouched and does not change. Please help me if you have any solution.
Upvotes: 0
Views: 903
Reputation: 1516
The problem is that you are assigning reference of a to d, since a list/in this case numpy array are mutable, any changes to d, will also affect values in a.
EDIT:- @EdChum thanks for the better way Numpy has a builtin copy function, since a is already a numpy array, you could use:-
d = a.copy()
@Old way which needs an additional import:-
import copy
d = copy.deepcopy(a)
instead of doing d=a
Upvotes: 0
Reputation: 1995
You can use built-in function of numpy: numpy.copy
:
d = numpy.copy(a)
Upvotes: 1