[Python] Numpy.array e tempi di accesso

Manlio Perillo manlio.perillo a gmail.com
Mar 3 Nov 2015 18:19:54 CET


2015-11-03 17:19 GMT+01:00 Pietro Battiston <ml a pietrobattiston.it>:
> Salve a tutti di nuovo,
>
> se definisco un semplice Fibonacci con una cache (volutamente un po'
> stupida):
>

> [...]
> E va bene che il
> dizionario Python è una struttura efficiente, ma... è sempre una hash
> table più un indexing, come fa a battere un semplice indexing?
> [...]
> ... ma resta il fatto (verificato con %lprun) che "cached = cache[n]" è più veloce quando cache è un dizionario (~0.3 µs) che quando è un array (~0.4 µs).
>
> Ciò umilia quel briciolo di comprensione delle strutture di dati che credevo di avere. Qualcuno sa illuminarmi?
>

Tieni conto che con Python è ben possibile che ci siano altri fattori
che "mascherano" le performance reali [1].
Magari l'indexing di un array numpy non accede direttamente alla
memoria come accade in C.

Fai un paio di altri test, usando:
1) array (della libreria standard, anche se Python 3.x per avere
intery a 64 bits)
2) Cython usando un array C

[1] Proprio l'altro giorno mi è successa una cosa del genere in un
progetto in Go, dove la creazione di una goroutine falsava
completamente il test, facendo apparire l'implementazione più lenta
come più veloce. Tolto il codice addizionale ho ottenuto i risultati
corretti.


Ciao  Manlio


Maggiori informazioni sulla lista Python