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