[Python-es] Eficiencia de las listas

Kiko kikocorreoso en gmail.com
Mie Ago 7 21:22:44 CEST 2013


No conocía openBUGS.

Ya nos contarás (si puedes y quieres) lo que te traes entre manos, que
seguro que aprenderemos todos!!!

El 07/08/13, Chema Cortes <pych3m4 en gmail.com> escribió:
> El día 7 de agosto de 2013 17:56, Kiko <kikocorreoso en gmail.com> escribió:
>
>> pandas está muy 'cythonizado' por lo que para muchas operaciones
>> debería ser muy buena opción. Su funcionamiento pretende emular parte
>> de la funcionalidad de R (dataframes).
>
> Sí, ya me doy cuenta que todo va moviéndose muy rápido. De momento
> quiero centrarme en R y OpenBUGS (inferencia bayesiana), pero tengo a
> pandas y scikit-learn en espera.
>
>> Si trabajas con información muy 'grande' que no entra en memoria una
>> buena opción es pytables ya que el acceso a los datos es muy rápido.
>> Si te entra todo en memoria quizá no es necesario que lo pruebes
>> ahora.
>
> De momento, no paso de 5 ó 6 GB. que es aún manejable. Procuro que las
> operaciones no aumenten el gasto de memoria, pero preveo pasar a otras
> estrategias como el cálculo distribuido.
>
>> Gente que andaba desarrollando numexpr (Francesc) ahora están metidos
>> en continuum que son los desarrolladores de numba, blaze,... Numexpr
>> es un jit de un subconjunto limitado de operaciones. Numba quizá sea
>> algo más generalista y es realmente brillante cuando hay que meterse
>> en bucles y la vectorización de numpy no ayuda del todo
>> (http://jakevdp.github.io/blog/2013/06/15/numba-vs-cython-take-2/).
>
> Sigo bastante de cerca la labor de Francesc, Travis Oliphant y el
> resto del equipo de continuum. LLVM (usado por numba) está entre las
> "estrategias" de cálculo distribuido consideradas, aunque no descarto
> soluciones del estilo hadoop.
>
>
>>
>> Saludos.
>>
>> El 07/08/13, Chema Cortes <pych3m4 en gmail.com> escribió:
>>> El día 7 de agosto de 2013 14:30, Kiko <kikocorreoso en gmail.com> escribió:
>>>
>>>> mira también rot90, fliplr, flipud...
>>>>
>>>> http://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html#rearranging-elements
>>>
>>> Los había mirado, pero son funciones para  >= 2-d. No veo cómo usarlas
>>> con listas unidimensionales.
>>>
>>>
>>>>
>>>> El 07/08/13, Chema Cortes <pych3m4 en gmail.com> escribió:
>>>>> El día 6 de agosto de 2013 16:38, Daπid <davidmenhur en gmail.com>
>>>>> escribió:
>>>>>> 2013/8/6 Chema Cortes <pych3m4 en 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 en python.org
>>>>> http://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> http://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>>
>>> --
>>> 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 en python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> --
> 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 en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


Más información sobre la lista de distribución Python-es