eficiencia de numpy.array

Francesc Altet faltet en carabos.com
Jue Mar 8 13:41:30 CET 2007


El dj 08 de 03 del 2007 a les 12:39 +0100, en/na tny va escriure:
> Es realmente más eficiente el array de numpy que la lista de python??
> Para ver si realmente me traía cuenta emplear array de numpy he hecho
> unas pruebas y parece que array no sale muy bien parada...

Pues es como todo en este mundo: depende para qué lo quieras usar.
En asignaciones puras, la lista pura de Python está muy optimizada, y
las características adicionales (fancy indexing, etc) de los objectos
numpy les impide llegar a las prestaciones de la listas en este caso
concreto.

Sin embargo, como contenedores de listas de números (o objetos)
multidimensionales los objetos de numpy son más compactos (requieren
menos memoria) y además, para realizar operaciones matemáticas con
objetos de una cierta magnitud, mucho más rápidos.

A modo de ejemplo, considera el siguiente benchmark:

from numpy import array
import time

N = 10000

def prueba1():
    a=[1,2]*1000
    antes= time.time()
    for i in xrange(N):
        b = sum(a)
    print time.time()-antes

def prueba3():
    a=array([1,2]*1000)
    antes= time.time()
    for i in xrange(N):
        b = a.sum()
    print time.time()-antes

prueba1()
prueba3()

que, al correrlo en mi máquina da:

2.69558286667
0.320109128952

o sea, que numpy puede hacer las sumas 10x más rápido.

En fin, que hay que conocer los defectos y las partes positivas de los
objetos que usas si es que quieres sacarles el máximo rendimiento.

Por cierto, en tu código original, es más rápido hacer el siguiente tipo
de asignación:

a[1], a[0] = a[0], a[1]

que el paso por una variable temporal:

b=a[0]
a[0]=a[1]
a[1]=b

Saludos!

-- 
Francesc Altet    |  Be careful about using the following code --
Carabos Coop. V.  |  I've only proven that it works, 
www.carabos.com   |  I haven't tested it. -- Donald Knuth

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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