2017-04-07 4 views
0

Wenn ich ein Array einer Matrix in eine andere Variable speichern, wenn ich den Wert der Matrix ändern, wurde das vaule einer anderen Variablen auch geändert. Ich weiß nicht warum.Subtraktion in Array wirkt sich auf das Ergebnis

import numpy as np 

a = np.array([[1,2,3],[4,5,6]]) 
b = a[1,:] 
print a 
print b 

a[1,:] = a[1,:] - a[0,:] 
print a 
print b 

die Ergebnisse

[[1 2 3] 
[4 5 6]] 
[4 5 6] 

[[1 2 3] 
[3 3 3]] 
[3 3 3] 

in diesem Skript ist, wurde der Wert von b auch geändert werden, wenn ein geändert.

Antwort

0

Sie benötigen mehr über flache Kopie lesen:

Zuweisungsanweisungen in Python keine Objekte kopieren, sie Bindungen zwischen einem Ziel und einem Objekt erstellen. Für Sammlungen, die veränderbar sind oder veränderbare Elemente enthalten, wird manchmal eine Kopie benötigt, sodass eine eine Kopie ändern kann, ohne die andere zu ändern. Dieses Modul bietet allgemeine seichte und tiefe Kopiervorgänge.

  • Der Unterschied zwischen flachen und tiefen Kopieren ist nur relevant für zusammengesetzte Objekte (Objekte, die andere Objekte enthalten, wie Listen oder Klasseninstanzen):

  • A flache Kopie baut eine neue Verbindung Objekt und dann (um den Bereich möglich) fügt Referenzen in die Objekte in Original eingefügt.

  • A tiefe Kopie eine neue Verbindung Objekt konstruiert und dann, rekursiv, fügt Kopien in sie von den Objekten in der Original gefunden.

Beispiel:

>>> lst1 = ['a','b',['ab','ba']] 
>>> lst2 = lst1[:] 
>>> lst2[0] = 'c' 
>>> lst2[2][1] = 'd' 
>>> print(lst1) 
['c', 'b', ['ab', 'd']] 

Jetzt, Sie müssen deepcopy verwenden, zum Beispiel:

>>>from copy import deepcopy 
>>>lst1 = ['a','b',['ab','ba']] 
>>>lst2 = deepcopy(lst1) 
>>>lst2[2][1] = "d" 
>>>lst2[0] = "c"; 
>>>print lst2 
>>>print lst1 
['c', 'b', ['ab', 'd']] 
['a', 'b', ['ab', 'ba']] 

Sie können mehr über Shallow and Deep Copy lesen.

+0

Vielen Dank, ich habe es. – Shuhua

Verwandte Themen