Das eigentliche Problem, das ich habe, ist, dass ich eine lange sortierte Liste von (float, str)
Tupel im RAM speichern möchte. Eine einfache Liste passt nicht in meinen 4 GB RAM, also dachte ich, ich könnte zwei numpy.ndarray
s verwenden.Wie fülle ich zwei (oder mehr) numpige Arrays aus einem einzigen iterierbaren Tupel?
Die Quelle der Daten ist eine iterierbare 2-Tupel. numpy
hat eine fromiter
Funktion, aber wie kann ich es verwenden? Die Anzahl der Elemente im Iterablen ist unbekannt. Ich kann es aufgrund von Speicherbeschränkungen nicht zuerst in eine Liste aufnehmen. Ich dachte an itertools.tee
, aber es scheint hier viel Speicher Overhead hinzuzufügen.
Was ich denke, könnte ich den Iterator in Chunks konsumieren und diese zu den Arrays hinzufügen. Dann ist meine Frage, wie man das effizient macht? Soll ich vielleicht 2 2D-Arrays machen und Zeilen hinzufügen? (Später müsste ich sie in 1D umwandeln).
Oder vielleicht gibt es einen besseren Ansatz? Alles, was ich wirklich brauche, ist, ein Array von Strings nach dem Wert der entsprechenden Zahl in logarithmischer Zeit zu durchsuchen (deshalb möchte ich nach dem Wert von float sortieren) und es so kompakt wie möglich zu halten.
P.S. Das iterable wird nicht sortiert.
Würde 'np.fromiter' verwendet, um ein einzelnes Array mit zwei Spalten zu erstellen? – unutbu
@unutbu ... Ich bin mir nicht sicher, warum ich das nicht bedacht habe :) Klingt nach einer großartigen Idee. Dann sortiere ich es einfach entlang der längeren Achse und behalte es so, richtig? Du könntest es als Antwort posten, nehme ich an. –