numexpr.

Valuatore di espressione di array numerica veloce per Python e Numpy.
Scarica ora

numexpr. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • MIT/X Consortium Lic...
  • Prezzo:
  • FREE
  • Nome editore:
  • David M. Cooke, Tim Hochberg, Francesc Alted, Ivan Vilata
  • Sito web dell'editore:
  • http://code.google.com/u/david.m.cooke/

numexpr. Tag


numexpr. Descrizione

Valutatore di espressione di array numerica veloce per Python e Numpy. NUMEXPR è una biblioteca Python che valuta le espressioni di array multiple dell'operatore molte volte più velocemente più velocemente di una lattina di polpera. Accetta l'espressione come una stringa, lo analizza, la riscrive in modo più efficiente e lo compila in un codice pitone più veloce al volo. È la prossima cosa migliore per scrivere l'espressione in C e la compilazione con un compilatore just-in-time (jit) specializzato, cioè non richiede un compilatore in runtime. Perché funziona, ci sono due estremi per la valutazione dell'espressione dell'array. Ogni operazione binaria può funzionare separatamente rispetto agli elementi dell'array e restituire un array temporaneo. Questo è ciò che pregiudiziale: 2 * A + 3 * B utilizza tre array temporanei grandi come A o B. Questa strategia spreca memoria (un problema se gli array sono grandi). Non è anche un buon uso della memoria della cache della CPU perché i risultati di 2 * A e 3 * B non saranno in cache per l'aggiunta finale se gli array sono grandi. L'altro estremo è quello di loop su ciascun elemento: per I in XRange (Len (A)): c = 2 * A + 3 * B Questo conserva memoria ed è buono per la cache, ma su ciascun pitone Iterazione deve controllare il tipo di ogni operando e selezionare la routine corretta per ogni operazione. Tutto tranne il primo tali controlli sono sprecati, poiché gli array di ingresso non stanno cambiando. Numumexpr utilizza un approccio intermedio. Gli array sono gestiti in blocchi (il primo passaggio utilizza 256 elementi). Come codice Python, sembra qualcosa del genere: per I in Xrange (0, Len (A), 256): R0 = A R1 = B Multiply (R0, 2 , R2) Moltiplicare (R1, 3, R3) ADD (R2, 3, R3) C (R2, R3, R2) C = R2IL 3-argomento Forma di ADD () memorizza il risultato nel terzo argomento, invece di allocare un nuovo Vettore. Ciò raggiunge un buon equilibrio tra cache e previsione del ramo. La macchina virtuale è stata scritta interamente in C, che lo rende più veloce del Python sopra. Per ulteriori informazioni su NumexExpr, leggi la panoramica del NUMEXPR scritta dall'autore originale (DAVID M. Cooke). Esempi di utilizzo che è semplice: >>> Importa Numpy come NP >>> Importa NUMEXPR come NE >>> A = NP.Arange (1E6) # Scegli grandi array per prestazioni elevate >>> B = NP.Arange (1E6) >>> Ne.evaluate ("A + 1 ") # un semplice espressioneArray () >>> Ne.evaluate ('A * B-4.1 * A> 2,5 * B') # Un più complesso OneArray (, Dtype = bool) e veloce ...: - ) >>> Timeit A ** 2 + B ** 2 + 2 * A * B10 Loop, Best of 3: 33.3 MS per Loop >>> Timeit Ne.evaluate ("A ** 2 + B ** 2 + 2 * A * B ") 100 loop, meglio di 3: 7,96 ms per ciclo # 4.2x più veloce dei requisiti di polpera: · Python. · Numpy.


numexpr. Software correlato

Zodbupdate.

Aggiorna i riferimenti della classe Zodb per le classi spostate o rinominate ...

135

Scarica

wsgisvc.

Uno script per installare le configurazioni di distribuzione incolla come servizi Windows ...

175

Scarica