Wählen Sie mehrere Elemente aus python-array
Wie kann ich mehrere Elemente auswählen, die von einer python-Arrays? Ich weiß, dass dies möglich ist, in numpy-array, aber ich kann nicht verwenden numpy-array in diesem Fall. Ich möchte zum auswählen bestimmter Elemente eines Arrays ähnlich maskierten Arrays Verwendung, aber ich bekomme folgenden Fehler in python
nonzero = numpyarray.nonzero()
pythonarray[nonzero] = numpyarray[nonzero]
*** TypeError: only integer arrays with one element can be converted to an index
numpyarray[nonzero]
funktioniert einwandfrei, aber ich kann nicht auf pythonarray[nonzero]
. Gibt es eine Möglichkeit in python-Arrays?
InformationsquelleAutor Alok | 2012-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach eine Schleife verwenden:
Numpy-arrays, die wahrscheinlich Unterstützung von n-ary-Indizes, um die Leistung zu maximieren; Python Listen nicht so weit gehen mit Optimierungen, so dass Sie der einfachere Weg.
idx
in der assignment expression stattnonzero
Wenn Sie müssen etwas tun, eine million mal schnell, Python im Allgemeinen vielleicht nicht eine gute Wahl sein. (Wenn Sie nicht halten können diese in C-code mithilfe von numpy.)
Sind Sie sicher, dass die Python-Listen Größe ändern, schneller als numpy-arrays? Soweit ich weiß, Python-Listen werden unterstützt von C-arrays, so dass Sie neu zugewiesen werden und ggf. kopiert. Wenn Sie brauchen, um zu wachsen effizient auf eine große Größe, ohne dass eine angemessene Obergrenze, würde ich erwägen, eine Art von C-basierten verkettete Liste-Implementierung, um loszuwerden, alle die Umschichtungen.
Auch, wenn jede Zeile hat genau 30 Elemente, was Sie tun könnten, ist ein Python / verknüpften Liste von 30-element numpy-arrays, eine pro Zeile. (Die IO-Kosten Dominieren sollte der Aufwand für eine verknüpfte Liste.) Einmal liest du die ganze Datei, Sie wissen, wie viele Elemente es gibt. Sie könnten dann entweder erstellen Sie eine riesige numpy-array für das Ergebnis und Kopie Zeug über, sobald aus der Liste oder benutzen Sie einfach die Liste-des-arrays, direkt. (Welche besser ist, hängt von Ihrem Anwendungsfall.)
Sie könnten Fragen, eine separate Frage über, wie zu Lesen, die Millionen Zeilen anfügen, 30 Elemente, die anschließend effizient (ein kleines Beispiel auch wenn es zu langsam ist).
InformationsquelleAutor millimoose