mira también rot90, fliplr, flipud... http://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html#rearranging-elements
El 07/08/13, Chema Cortes <pych...@gmail.com> escribió: > El día 6 de agosto de 2013 16:38, Daπid <davidmen...@gmail.com> escribió: >> 2013/8/6 Chema Cortes <pych...@gmail.com>: > >> 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 > > He mirado un poco mejor el funcionamiento de los arrays en numpy. Los > troceos no crean nuevos arrays, sino lo que llama "vistas" ("views") > (a excepción de los "fancy indexing" de numpy). Como las vistas están > enlazadas con el objeto original, los cambios en una vista se efectúan > directamente sobre el objeto original de forma eficiente. > > Creo que usaré los arrays de numpy para operaciones con listas > grandes. También necesitaba hacer rotar la lista, cosa que veo que > puede hacer con np.roll, aunque no es tan eficiente como deque > .rotate() que realiza la operación "in-place". > > Como curiosidad, había descartado algunas pruebas bizarras con deque, > pero muestra lo increiblemente rápido que puede llegar a ser: > > d=deque(l) > > %timeit d.rotate(-i-1);d.extendleft([d.popleft() for _ in > range(j-i)]);d.rotate(i+1) > 10 loops, best of 3: 29.8 ms per loop > > Es la misma operación que l[i+1:j+1]=l2[j:i:-1], primero rotando la > lista hacia la izquierda, añadiendo la lista invertida al principio y > volviendo a rotar hacia la derecha para mantener el mismo orden. > > > -- > Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": > http://ch3m4.org/blog > Buscador Python Hispano: http://ch3m4.org/python-es > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/