Eine effiziente Möglichkeit zum löschen einer Spalte aus einer Numpy-array?
Wenn ich eine sehr große numpy-array mit einem nutzlosen Spalte, wie könnte ich es löschen ohne erstellen einer Kopie des ursprünglichen Arrays?
np.delete(my_np_array, 0, 1)
Der obige code wird zurückgeben einer Kopie des Arrays ohne die null-TEN Spalte. Aber stattdessen würde ich gerne einfach löschen, Spalte aus my_np_array
da ich es nicht brauchen. Für sehr große Datensätze, die Speicher-management wird wichtig, und kopieren möglicherweise nicht eine option sein.
- Verhinderung von Kopien in numpy ist leider schwieriges Geschäft. Wenn es das erste oder Letzte Spalte, können Sie wahrscheinlich Weg mit einem einfachen array-slice. Das wird wahrscheinlich nicht kopieren, das array jetzt, aber dann, wenn Sie gehen, um etwas kompliziertere Dinge mit, es gibt keine Garantie, dass Sie nicht bekommen Kopien (oder arrays) im code später (AFAIK).
- Ist es möglich, um es zu laden anders in python? Wenn das array ist etwas, generiert aus den Daten, können wir etwas tun, um zu töten, die Spalte vor der hand? Wenn nicht, können wir Vorverarbeiten den array auf andere Weise, wie in
MATLAB
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der Speicher das Hauptproblem, was Sie tun können, ist, verschieben Sie Spalten innerhalb das array so, dass die nicht benötigte Spalte wird am Ende der Arrays, dann verwenden Sie ndarray.Größe, ändert er das array in-place, um es schrumpfen und verwerfen die äußeren Spalte.
Können Sie nicht entfernen Sie einfach die erste Spalte eines array in-place-mithilfe der bereitgestellten API, und ich vermute, dass es ist, weil der Speicher-layout eines ndarray, die Google maps multidimensionale Indizierung lineare byte-orientierten Adressierung innerhalb der Blöcke von zusammenhängenden Speicher.
Folgende Beispiel kopiert die Letzte Spalte in der ersten und löscht dann die letzten (nun nicht mehr benötigte), sofort Spülen Sie den zugehörigen Speicher. So ist es im Grunde entfernt die veraltete Spalte vollständig aus dem Arbeitsspeicher auf die Kosten für einen Wechsel Ihrer Spalte um.
Wenn Sie schneiden
numpy
nicht eine Kopie machen; in anderen WortenAntworten
[1, 12, 3, 4, 5]
Wenn Sie brauchen, um ein element zu löschen, in der Mitte jedoch ein einzelnes schneiden wird nicht funktionieren.
b=a[:,1:]
Numpy-arrays sind unveränderlich. So können Sie nicht re-sized, ohne die Erstellung einer intermediate-Kopie.
So entfernen Sie bestimmte Elemente in ein numpy-array
Erstellen einer Ansicht mit schneiden, und erstellen Sie eine Kopie, dass ist wahrscheinlich die Schnellste, die Sie tun können.
np.resize
was gibt ein neues array zurück, unda.resize
(woa
ist ein array) die Größe im Ort