nummerpr.

Schnelles numerischer Array Expressionsauswertung für Python und NUMPY.
Jetzt downloaden

nummerpr. Ranking & Zusammenfassung

Anzeige

  • Rating:
  • Lizenz:
  • MIT/X Consortium Lic...
  • Preis:
  • FREE
  • Name des Herausgebers:
  • David M. Cooke, Tim Hochberg, Francesc Alted, Ivan Vilata
  • Website des Verlags:
  • http://code.google.com/u/david.m.cooke/

nummerpr. Stichworte


nummerpr. Beschreibung

Schneller numerischer Array Expression Evaluator für Python und NUMPY. NUMEXPR ist eine Python-Bibliothek, die mehrere Multiple-Operator-Array-Ausdrücke älter als schneller als NUMPY-Dose auswertet. Es akzeptiert den Ausdruck als Zeichenfolge, analysiert es, schreibt es effizienter neu, und kompiliert es mit einem schnelleren Python-Code in der Fliege. Es ist das nächste Beste, um den Ausdruck in c zu schreiben und es mit einem spezialisierten Just-in-time-Compiler-Compiler zusammenzustellen, d. H. Es erfordert keinen Compiler zur Laufzeit. Warum ist es funktionsfähig. Jeder binäre Vorgang kann separat über die Array-Elemente ausgeführt werden und geben ein temporäres Array zurück. Dies ist, was NUMPY tut: 2 * A + 3 * B verwendet drei temporäre Arrays, so groß wie A oder B. Diese Strategie verschwendet den Speicher (ein Problem, wenn die Arrays groß sind). Es ist auch kein guter Umgang mit dem CPU-Cache-Speicher, da die Ergebnisse von 2 * A und 3 * B für die endgültige Addition nicht im Cache liegen, wenn die Arrays groß sind. Das andere Extrem ist das Schleifen jedes Elements: für ich in xrange (len (a)): c = 2 * a + 3 * b Dies spart Speicher und ist für den Cache gut, aber auf jedem Iteration muss Python den Typ jedes Operanden prüfen und auswählen die richtige Routine für jeden Vorgang. Alle außer den ersten solcher Überprüfungen werden verschwendet, da sich die Eingabearrays nicht ändern .NUMEXPR verwendet einen Zwischenansatz. Arrays werden in Brocken behandelt (der erste Durchlauf verwendet 256 Elemente). Als Python-Code sieht es so etwas aus: Für I in Xrange (0, len (A), 256): R0 = A R1 = B Multiplizieren (R0, 2 , R2) Multiplizieren (R1, 3, R3) ADD (R2, R3, R2) C = R2Die 3-Argument-Formular von Add () speichert das Ergebnis im dritten Argument, anstatt ein neues zuzugeben Array. Dies erreicht ein gutes Gleichgewicht zwischen Cache- und Zweigvorhersage. Die virtuelle Maschine ist vollständig in c geschrieben, was es schneller macht als der Python oben. Für weitere Informationen über NUMEXPR, lesen Sie die Übersicht von numExpr, die vom ursprünglichen Autor geschriebene Numexpr (David M. Cooke). EXEXAMPLE DES NUTZUNGEN Importieren numpy als NP >>> Importieren von numExpr als NE >>> a = np.arange (1E6) # Wählen Sie große Arrays für Hochleistung >>> B = NP.ARAGE (1E6) >>> ne.Valuate ("A + 1 ") # A Simple ExpressionArray () >>> ne.Valuate ('A * B-4.1 * A> 2.5 * B') # A komplexer OneArray (, dtype = bool) und schnell ...: - ) >>> TIMEL A ** 2 + B ** 2 + 2 * A * B10-Schleifen, bestes von 3: 33.3 ms pro Schleife >>> TimeIT NE.Valuate ("A ** 2 + B ** 2 + 2) * A * B ") 100 Loops, bestes von 3: 7.96 ms pro Schleife # 4.2x schneller als nötiger Anforderungen: · Python · NUMPY.


nummerpr. Zugehörige Software

TXgr

Eine PHP-Bibliothek, um Diagramme umzuwandeln, die mit ASCII-Technik in Bitmaps gezeichnet werden ...

164

Herunterladen