Dies wurde viel abgedeckt, aber ein gutes Duplikat zu finden ist zu viel Arbeit. :(
Mal sehen, ob ich schnell sich die Dinge mit Ihren Beispiele beschreiben können.
>>> a = [1,2,3,4] # a list contains pointers to numbers elsewhere
>>> b = a[1:3] # a new list, with copies of those pointers
>>> b[1] = 0 # change one pointer in b
>>> a
[1, 2, 3, 4] # does not change any pointers in a
>>> b
[2, 0]
Ein array
eine andere Struktur hat - es einen Datenpuffer mit ‚raw‘ Zahlen (oder andere Byte-Werte)
numpy array
>>> c = numpy.array([1,2,3,4])
>>> d = c[1:3] # a view; a new array but uses same data buffer
>>> d[1] = 0 # change a value in d;
>>> c
array([1, 2, 0, 4]) # we see the change in the corrsponding slot of c
>>> d
array([2, 0])
der entscheidende Punkt mit Listen ist, dass sie Zeiger auf Objekte enthalten können Sie die Zeiger kopieren, ohne die Objekte zu kopieren;.. und Sie können ohne Änderung anderer Kopien der Zeiger Zeiger ändern
Um Speicher und Geschwindigkeit numpy
als implementiert ein Konzept von view
zu speichern. Es kann ein neues Array erstellen, ohne dass Werte aus dem Original kopiert werden, da es den Datenpuffer gemeinsam nutzen kann. Es ist jedoch auch möglich, eine Kopie, z.
e = c[1:3].copy()
e[0] = 10
# no change in c
view
v copy
ist ein großes Thema in numpy
und fundamental, besonders wenn sie mit verschiedenen Arten der Indizierung zu tun (Scheiben, Basic, Advanced). Wir können Ihnen bei Fragen helfen, aber Sie sollten auch die numpy Dokumente lesen. Es gibt keinen Ersatz für das Verständnis der Grundlagen, wie ein numpy
Array gespeichert ist.
http://scipy-cookbook.readthedocs.io/items/ViewsVsCopies.html
http://www.scipy-lectures.org/advanced/advanced_numpy/ (kann weiter fortgeschritten sein, dass das, was Sie jetzt brauchen)
Mögliche Duplikat [Array vs Vektor vs Liste] (http://stackoverflow.com/questions/1905417/array-vs -Vektor-vs-Liste) – polka
@polka Danke für die schnelle Antwort, aber es ist nicht genug klar für mich. – umtkas
Beachten Sie, dass es nicht korrekt ist, von einer anonymen Liste zu sprechen. Es ist ein numpliges Array. – chthonicdaemon