user225297
user225297

Reputation: 11

Numpy array overwritten in nested function

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

Answers (2)

Namit Singal
Namit Singal

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

Tuan Anh Hoang-Vu
Tuan Anh Hoang-Vu

Reputation: 1995

You can use built-in function of numpy: numpy.copy:

d = numpy.copy(a)

Upvotes: 1

Related Questions