2017-12-05 8 views
0

Ich möchte die Werte der Matrix W in Wo einstellen. Dann gehe ich in eine Schleife und mache Operationen mit W. Am Ende der Schleife möchte ich es in Wo wiederherstellen, aber ich bekomme das gegenteilige Ergebnis, Wo wird Wo.Python - Warum wird die Sicherungsvariable innerhalb der Schleife aktualisiert, wenn ich den Wert nicht intern ändere?

Wie ist das möglich? Wie kann ich erreichen, was ich will? Ich habe versucht, auch als globales Wo definieren, aber kein Ergebnis

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 

Dann, wenn ich den Wert von Wo Check wird geändert in eine Weise, dass Wo == W immer wahr ist.

Was fehlt mir?

Vielen Dank im Voraus

+1

Ihre Kopie ist eine Referenz. 'Wo' und' W' sind unterschiedliche Aliase für denselben Speicher. Du brauchst eine tiefe Kopie –

Antwort

1

Um zu erreichen, was Sie wollen, benötigen Sie eine tiefe Kopie. Andernfalls erstellen Sie nur einen Verweis auf denselben Speicher.

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

Danke, Thomas! –

0

Alle Artikel in Python sind Verweise so, wenn Sie einen Verweis wird auch andere ändern

ändern
l = [] 
global l_global 
l_global = l 

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

print(l) 
print(l_global) 

es Sinn, jetzt für Ihren Fall macht?

+0

Ja Xeningem, ich habe nicht über die Referenzen nachgedacht ... Vielen Dank –

Verwandte Themen