Zum Beispiel, wenn wir ein numpy
Array A
haben und ein numpy
Array B
mit denselben Elementen wollen.
Was ist der Unterschied zwischen den folgenden (siehe unten) Methoden? Wann wird zusätzlicher Speicher zugewiesen und wann nicht?
B = A
B[:] = A
(wieB[:]=A[:]
?)numpy.copy(B, A)
but B = A[:] would do something more like 1
? Demnach ist stackoverflow.com/a/2612815new_list = old_list[:]
auch eine Kopie.some_array[:]
ausführen, wird ein neues Array-Objekt erstellt. Dieses neue Objekt ist jedoch eine Ansicht desselben Speichers wie das ursprüngliche Array, das nicht kopiert wurde. Deshalb habe ich gesagt, es ist eher soB = A
. Es braucht nurO(1)
Raum und Zeit und nicht die, dieO(n)
eine echte Kopie benötigen würde.B=A
erstellt eine ReferenzB[:]=A
macht eine Kopienumpy.copy(B,A)
macht eine KopieDie letzten beiden benötigen zusätzlichen Speicher.
Um eine tiefe Kopie zu erstellen, müssen Sie verwenden
B = copy.deepcopy(A)
quelle
B[:] = A
Erstellt keine tiefe Kopie von Arrays vom Objekttyp, zA = np.array([[1,2,3],[4,5]]); B = np.array([None,None], dtype='O')
. Versuchen Sie nunB[:] = A; B[0][0]=99
, dies ändert das erste Element in A und B ! Meines Wissens gibt es keinen anderen Weg, um eine tiefe Kopie zu garantieren, selbst eines Numpy-Arrays, alscopy.deepcopy
Dies ist die einzige funktionierende Antwort für mich:
quelle