[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