Ich bemerkte ein unerwartetes Verhalten beim Arbeiten mit einer Kopie eines Arrays. Zum Beispiel habe ich eine NumPy Array (a):Mysteriöses Verhalten von kopierten NumPy-Arrays
import numpy as np
a = np.random.randint(9, size=(4,4))
Ausgang:
array([[3, 4, 4, 3],
[0, 0, 4, 2],
[6, 3, 1, 6],
[1, 5, 5, 5]])
Dann mache ich eine Kopie dieses Array (b) die Kopie zu manipulieren und halten Sie das Original intakt:
b = a #copy of the array
b[b == 2] = 0 #manipulating the copy
Allerdings scheint es, dass sowohl das Original und die Kopie nun geändert:
b = array([[3, 4, 4, 3],
[0, 0, 4, 0],
[6, 3, 1, 6],
[1, 5, 5, 5]])
a = array([[3, 4, 4, 3],
[0, 0, 4, 0],
[6, 3, 1, 6],
[1, 5, 5, 5]])
Ich verstehe nicht, warum das ursprüngliche Array geändert wird, wenn die Manipulation nur auf die Kopie angewendet wurde. Das ist ganz anders, als ich es von Matlab oder R erwarten würde. Gibt es eine Möglichkeit, dieses Verhalten zu verhindern?
'b = a' tut ** nicht ** eine Kopie erstellen. Sie haben gerade eine neue Referenz erstellt. –
Lesen Sie diese grundlegende Dokumentation über Referenzen, Ansichten und Kopien: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views – hpaulj