Mi aspettavo array.array
di essere più veloce delle liste, dato che le matrici sembrano essere senza box.
Tuttavia, ottengo il seguente risultato:
In [1]: import array
In [2]: L = list(range(100000000))
In [3]: A = array.array('l', range(100000000))
In [4]: %timeit sum(L)
1 loop, best of 3: 667 ms per loop
In [5]: %timeit sum(A)
1 loop, best of 3: 1.41 s per loop
In [6]: %timeit sum(L)
1 loop, best of 3: 627 ms per loop
In [7]: %timeit sum(A)
1 loop, best of 3: 1.39 s per loop
Quale potrebbe essere la causa di tale differenza?
array
pacchetto. Se vuoi fare notevoli quantità di matematica, Numpy opera alla velocità della luce (cioè C), e di solito meglio di ingenui implementazioni di cose come sum()
).
array
è piuttosto veloce nel convertire una stringa di numeri interi (che rappresentano byte ASCII) in un str
oggetto. Lo stesso Guido ha escogitato questo dopo molte altre soluzioni ed è stato piuttosto sorpreso dalle prestazioni. Comunque questo è l'unico posto dove ricordo di averlo visto utile. numpy
è molto meglio per gestire gli array ma è una dipendenza di terze parti.