Ich beginne gerade mit NumPy, so dass mir einige Kernkonzepte fehlen könnten ...
Was ist der beste Weg, ein NumPy-Array aus einem Wörterbuch zu erstellen, dessen Werte Listen sind?
In etwa so:
%Vor%Sollte zu etwas wie:
werden %Vor%Ich werde einige grundlegende Statistiken zu jeder Zeile machen, zB:
%Vor%Fragen:
Was ist die beste / effizienteste Methode, um numpy.array aus dem Wörterbuch zu erstellen? Das Wörterbuch ist groß; ein paar Millionen Schlüssel mit jeweils ~ 20 Elementen.
Die Anzahl der Werte für jede 'Zeile' ist unterschiedlich. Wenn ich richtig verstehe, will numpy einheitliche Größe, also was fülle ich für die fehlenden Items aus, um std () glücklich zu machen?
Update: Eine Sache, die ich vergessen habe zu erwähnen - während die Python-Techniken vernünftig sind (z. B. das Umgehen von einigen Millionen Elementen ist schnell), ist es auf eine einzige CPU beschränkt. Numpy-Operationen skalieren schön zur Hardware und treffen alle CPUs, also sind sie attraktiv.
Sie müssen keine numpy Arrays erstellen, um numpy.std () aufzurufen. Sie können numpy.std () in einer Schleife über alle Werte Ihres Wörterbuchs aufrufen. Die Liste wird im laufenden Betrieb in ein numpliges Array konvertiert, um die Standardvariation zu berechnen.
Der Nachteil dieser Methode ist, dass die Hauptschleife in Python und nicht in C liegt. Aber ich denke, das sollte schnell genug sein: Sie werden immer noch std mit C-Geschwindigkeit berechnen, und Sie werden viel Speicher wie Sie speichern muss 0 Werte nicht speichern, wo Sie Arrays variabler Größe haben.
Beispiel mit O (N) -Komplexität:
%Vor%Obwohl hier bereits einige ziemlich vernünftige Ideen vorhanden sind, halte ich folgendes für erwähnenswert:
Das Füllen fehlender Daten mit einem beliebigen Standardwert würde die statistischen Eigenschaften (Std. usw.) beeinträchtigen. Offensichtlich hat Mapad deshalb den netten Trick vorgeschlagen, gleich große Datensätze zu gruppieren. Das Problem damit (vorausgesetzt, es gibt keine A-priori-Daten zu Datensatzlängen ist in der Nähe) ist, dass es noch mehr Berechnungen als die einfache Lösung beinhaltet:
Die Verwendung von Psyco ist eine gute Idee (es ist auffallend einfach zu benutzen, also versuch es einfach).
Es scheint, dass der optimale Weg darin besteht, die in Maplet 1 beschriebene Strategie zu verwenden, aber mit einer Modifikation - nicht die ganze Liste zu generieren, sondern das Wörterbuch zu durchlaufen, indem jede Zeile in numpy.array konvertiert und die erforderlichen Berechnungen durchgeführt werden . So:
%Vor%In jedem Fall werden ein paar Millionen Schleifen in Python nicht so lange dauern, wie man erwarten könnte. Außerdem sieht das nicht wie eine Routineberechnung aus, also wen interessiert es, wenn es eine zusätzliche Sekunde / Minute braucht, wenn es einmal oder sogar nur einmal ausgeführt wird.
Eine verallgemeinerte Variante dessen, was von Mapad vorgeschlagen wurde:
%Vor%numpiges Wörterbuch
Sie können ein strukturiertes Array verwenden, um die Fähigkeit zu erhalten, ein anonymer Gegenstand mit einem Schlüssel wie einem Wörterbuch zu adressieren.
%Vor%gibt jetzt
aus %Vor%