Seite 1 von 1

numpy array mit falschem Assignment

Verfasst: Sonntag 18. Oktober 2015, 06:32
von mettbär
Hallo,

ganz am Ende des folgenden Scripts sollte doch eigentlich das test-Array ausgegeben werden, oder nicht? Anscheinend setzt Python bei mir test auf test2, gibt also das falsche Array aus und überschreibt das richtige. Dabei ist auch egal, ob ich die Reihenfolge vertausche, also test=test2 verwende. Liegt das an meinem Code oder ist das nur bei mir so? Ich verwende Python 3.5 (64-bit) und Windows 7, falls euch das hilft.

Code: Alles auswählen

import numpy

test=numpy.array([1,2,3,4,5])
test2=test
for i in range(1,5):
        test2[i]=test2[i-1]+test2[i]
test2=test
print(test2)
Über Hilfe wäre ich echt dankbar, weil ich die Konstruktion oben in komplizierterer Ausführung zum Testen eines Verfahrens brauche.

Alex

Re: numpy array mit falschem Assignment

Verfasst: Sonntag 18. Oktober 2015, 08:00
von cofi
Willkommen im Forum!

`test2` _ist_ `test`. Eine Zuweisung erstellt keine Kopie. Aber `numpy.array` kennt eine `copy` Methode:

Code: Alles auswählen

In [9]: import numpy

In [10]: a = numpy.array(range(1,6))

In [11]: a2  = a.copy()

In [12]: for i in range(1, 5):
    a2[i] = a2[i-1] + a2[i]
   ....:     

In [13]: print(a2)
[ 1  3  6 10 15]

In [14]: print(a)
[1 2 3 4 5]

Re: numpy array mit falschem Assignment

Verfasst: Sonntag 18. Oktober 2015, 08:14
von mettbär
Ah ja. Das ist mir zuvor nie aufgefallen. Mit copy funktioniert alles richtig. Danke für die schnelle Antwort.

Re: numpy array mit falschem Assignment

Verfasst: Sonntag 18. Oktober 2015, 10:04
von Sirius3
@mettbär: für dieses Beispiel macht man auch keine Kopie, weil die passende numpy-Funktion schon automatisch das Ergebnis in einem neuen Array zurückliefert:

Code: Alles auswählen

>>> a = numpy.arange(1,6)
>>> a2 = a.cumsum()
>>> print(a2)
[ 1  3  6 10 15]
Bevor Du for-Schleifen verwendest, solltest Du nach passenden numpy-Schreibweisen suchen. Statt explizit Kopien zu machen, bekommst Du oft schon implizit ein neues Array.