Numpy数组在嵌套函数中被覆盖

时间:2015-06-11 21:10:11

标签: python arrays numpy overwrite

我遇到的问题是,当我将一个数组(下面的代码中的数组“a”)发送到一个函数(下面的代码中的“summation”)时,然后将它分配给另一个数组(下面的代码中的数组“d”) ,数组“d”的元素的任何变化也反映在数组“a”上。

<%= date_select :performance, :fine_esercizio,  { :order => [:day, :month, :year], :default => (Date.today - 1.months).at_end_of_month}, {:class => "small-4 columns"} %>

因此,当我运行此代码时,输​​出为:

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

我希望“a”不受影响,不会改变。如果您有任何解决方案,请帮助我。

2 个答案:

答案 0 :(得分:1)

您可以使用numpy的内置函数:numpy.copy

d = numpy.copy(a)

答案 1 :(得分:0)

问题在于你要将a的引用分配给d,因为列表/在这种情况下numpy数组是可变的,对d的任何更改也会影响a中的值。

编辑: - @EdChum感谢更好的方式 Numpy有一个内置的复制功能,因为a已经是一个numpy数组,你可以使用: -

d = a.copy()

@Old方式需要额外导入: -

import copy
d = copy.deepcopy(a)

而不是d=a