2015-11-05 178 views
2

下面給出的代碼是我正在處理的代碼的一部分。這裏x是一個numpy數組,f是代碼下面的例子中給出的數組的數組。我必須更新數組x的所有值,因此我使用運行循環來執行此操作。我正在使用迭代方案,並使用最後一個已知值x更新值。然而,循環第一次運行正常,但下一次運行第一次循環時得到的值爲x。但我打算爲所有循環取舊值x。任何人都可以幫我嗎?在for循環中使用變量的存儲值

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

由於您在'i'循環之後執行了返回操作,所以'k'循環沒有被「使用」。這是故意的嗎? – toine

+0

它是一個更大的代碼的一部分..所以其實我忘了刪除k循環..我面臨的問題是目前只關心我循環.. –

回答

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,還有更多內容。