下面给出的代码是我正在处理的代码的一部分。这里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]
。
答案 0 :(得分:1)
你应该改变:
old = x0
为:
old = x0.copy()
如果你想保持old
不变。这里的问题是old
和x0
是指向同一个对象的指针,因此当您使用以下行更改x0
时:
x0[i]=np.sum(old*(f[i][0:len(f[i])-1])) + 2
你也正在改变old
。 old is x0
将为True
。
如果你想挖掘相关的topic,还有更多内容。