2016-06-06 5 views
1

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?

+0

'b = a' tut ** nicht ** eine Kopie erstellen. Sie haben gerade eine neue Referenz erstellt. –

+0

Lesen Sie diese grundlegende Dokumentation über Referenzen, Ansichten und Kopien: https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views – hpaulj

Antwort

2

Mit b = a kopieren Sie nur die Referenz des Objekts, nicht das Objekt selbst. Sehen Sie sich diese copy Funktion an. Kurz gesagt, müssen Sie tun, b = a.copy()

Verwandte Themen