2017-12-05 10 views
0

Woの行列Wの値を設定します。 それから、私はループの中に入り、Wで操作を行います。ループの最後に、それをWoに復元したいのですが、逆の結果を得ています.WoはWoになっています。Python - 内部の値を変更しないとループ内のバックアップ変数が更新されているのはなぜですか?

どうすれば可能ですか?私は何をしたいのですか?私は==のW臥常に真であるような方法で、臥の値が変更されているチェックすると、私はまた、

W = np.random.rand(5, 10) 
global Wo 
Wo = W # Back up for the initial values of W 

for k in range(0, K): 

    for j in range(0, m):  # For every hidden node 

    for i in range(0, n):  # For every connection 

     # Operations (W get changed) 
     W = Wo 

そして、グローバルしかし、誰結果として臥定義しようとしています。

私には何が欠けていますか?事前

+1

お客様のコピーは参考情報です。 'Wo'と' W'は同じメモリの異なるエイリアスです。あなたは深いコピーが必要です –

答えて

1

あなたが望むことを達成するには、深いコピーが必要です。それ以外の場合は、同じメモリへの参照のみを作成します。

import numpy as np 
import copy as cp 

W = np.random.rand(5, 10) 
global Wo 

Wo = cp.deepcopy(W) # Back up for the initial values of W 

for k in range(0, K): 

    for j in range(0, m):  # For every hidden node 

    for i in range(0, n):  # For every connection 

     # Operations (W get changed) 
     W = cp.deepcopy(Wo) 
+0

ありがとう、トーマス! –

0

おかげで、あなたが他の一つの基準を変更するので、もしPythonですべての項目が参照されているが、あまりにも

l = [] 
global l_global 
l_global = l 

for i in range(1, 10): 
    l.append(i) 

print(l) 
print(l_global) 

それはあなたのケースのために今意味をなさないん変わりますか?

+0

はいXeningem、私は参照について考えなかった...ありがとうございます –

関連する問題