Opinion sobre los array en Python

Hernan Foffani hernan en orgmf.com.ar
Vie Abr 16 16:34:48 CEST 2004


Antonio Castro escribio:
> Me he decidido a hacer una comparación de eficiencia entre dos
> programas que usan arrays de identicas características. Uno está
> programa realizado en C y otro realizado en Python recurriendo
> a una lista de listas. Es decir:

tratando de no hacer hincapie en la violación de segmento de tu
programa C, que lo solucionas poniendo un par de {} en el segundo
for ;-), estas comparando cosas distintas.

para hacer la comparación equivalente deberías considerar como
*minimo* que:
  1. las listas de python son de tamaño dinámico. (vuelve a
  codificar los dos programas permitiendo que las pruebas se
  hagan con distintos tamaños especificados por linea de comandos)
  2. las listas de python alojan objetos de cualquier tipo.

> Resumiendo.  El programa C es unas 50 veces más rápido y estoy
> seguro de que no estoy sorprendiendo a casi nadie con ello.

a mí si.
me sorprende que *solo* sea 50.  ¿está bien hecha la prueba?
hubiera jurado que un buen compilador C hubiera optimizado
tu programa a un simple:
  main() { printf("Comienzo\n"); printf("End\n"); }
;-)

>
> Yo creo que se podría incluir soporte para estructuras tipo array.
>
> Me pregunto si para no romper el enfoque dinámico de Python
> lo suyo sería que hubiera que instanciar el objeto tabla pasandole
> un elemento de muestra y una lista de tamaños un para cada
> dimensión del array. Para un array de 1000x1000 sería algo así:
>
> tabla1=array(elem_muestra, 1000,1000)

no cambiaría mucho.  la unica ventaja es prealojar 1000x1000
elementos.  pero como un programa normal hace muchas mas cosas ese
supuesto ahorro solo se obtiene una vez y de hecho es posible
prealojar 1M de elementos en el python actual.
recuerda que en C ese array se aloja en tiempo de *compilación*!

además, en el estado actual del parser/compilador/interprete de
python, pasarle al constructor de la lista un "elem_muestra" es
irrelevante.  (hoy) no hay nada que pueda hacer mejor (o mas rapido)
sabiendo que todos los elementos serán de tipo int o cualquier
otra cosa.

optimizar python no es sencillo.  hay varias alternativas en
uso y en estudio.  desde generar codigo C a partir de anotaciones
y/o extensiones al lenguaje hasta ideas sobre compiladores JIT.

-H.




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