在for循环中使用变量的存储值

时间:2015-11-05 14:44:20

标签: python arrays numpy

下面给出的代码是我正在处理的代码的一部分。这里x是一个numpy数组,f是一个数组数组,如代码下面的例子所示。我必须更新数组x的所有值,因此我使用运行循环来执行此操作。我正在使用迭代方案,并使用最后已知的x值更新值。然而,循环第一次运行正常,但是下次运行第一个循环时它获得x的值。但我打算将x的旧值用于所有循环。有人可以帮帮我吗?

import numpy as np
def mulsucc(x0,f,n):
    old=x0
    for k in range(1,100):
        for i in range(0,n):
            print "old" + str(old)
            x0[i]=np.sum(old*(f[i][0:len(f[i])-1])) + 2
            print "new" + str(x0)
        return x0
x0=np.array([0,0])
f=np.array([[4,5,-20],[2,7,-10]])
print mulsucc(x0,f,2)

输出结果是:

old[0 0]
new[2 0]
old[2 0]
new[2 6]
[2 6]

但是我希望第二个旧值也应该是[0 0]

1 个答案:

答案 0 :(得分:1)

你应该改变:

old = x0

为:

old = x0.copy()

如果你想保持old不变。这里的问题是oldx0是指向同一个对象的指针,因此当您使用以下行更改x0时:

x0[i]=np.sum(old*(f[i][0:len(f[i])-1])) + 2

你也正在改变oldold is x0将为True。 如果你想挖掘相关的topic,还有更多内容。