2013/8/6 Chema Cortes <pych...@gmail.com>:
> Interesante caso usando numpy y numba. Pero el problema que veo es que
> la función flipper no debería tener fijados los parámetros de corte,
> lo que supongo que hará perder bastante eficacia al JIT de numba.

En absoluto. Pasando i y j como argumentos a la función, se tienen los
mismos tiempos. Numba es más eficiente cuantos más números se estén
cambiando:


In [17]: %timeit flipper(l,10**2, 10**3)
100000 loops, best of 3: 6.14 us per loop

In [18]: %timeit nflipper(l,10**2, 10**3)
100000 loops, best of 3: 5.8 us per loop

In [19]: %timeit flipper(l,10**3, 10**5)
1000 loops, best of 3: 351 us per loop

In [20]: %timeit nflipper(l,10**3, 10**5)
10000 loops, best of 3: 119 us per loop


He vuelto a medir los tiempos de NumPy sin función y ahora sí obtengo
resultados razonables:

In [26]: %timeit l[i+1:j+1]=l[j:i:-1]
1000 loops, best of 3: 351 us per loop

(i y j son 10**3, 5 respectivamente).


Por completitud, usando la lista L=list(l)

In [29]: %timeit L[i+1:j+1]=L[j:i:-1]
100 loops, best of 3: 6.77 ms per loop


Por otro lado, si la operación de inversión no se hace sobre el array,
sino sobre una copia, se gana tiempo:

In [31]: l2 = l.copy()

In [32]: %timeit l[i+1:j+1]=l2[j:i:-1]
10000 loops, best of 3: 101 us per loop


Pero claro, no estamos teniendo en cuenta la copia de l2 (15 ms)
(quizá útil si se va a repetir el mismo proceso sobre muchas secciones
no solapantes del array).
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a