[Python] Numpy.array e tempi di accesso
Manlio Perillo
manlio.perillo a gmail.com
Mar 3 Nov 2015 19:16:46 CET
2015-11-03 18:23 GMT+01:00 Manlio Perillo <manlio.perillo a gmail.com>:
> 2015-11-03 18:19 GMT+01:00 Manlio Perillo <manlio.perillo a gmail.com>:
> [...]
>> 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.
>>
>
> Ed infatti:
> http://stackoverflow.com/questions/22239199/numpy-array-indexing-and-or-addition-seems-slow
>
> A differenza di Go, però, qui non puoi farci niente!
>
Prova con questa funzione:
def afib(n):
cache = -ones(shape=n+1, dtype=object)
cache[0] = cache[1] = 1
return _fib(n, cache)
Il risultato può sorprendere, ma quando usi int64, numpy ad ogni
lettura di un elemento dell'array deve costruire un nuovo oggetto
python (Python non supporta i tipi così detti unboxed).
Però numpy ha ancora del codice addizionale in mezzo, perchè questa versione
def afib(n):
cache = [-1 for i in range(n+1)]
cache[0] = cache[1] = 1
return _fib(n, cache)
è più efficiente.
Dovrei leggere il codice, ma non ne ho voglia.
Ciao Manlio
Maggiori informazioni sulla lista
Python