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/