2012-06-08 26 views
25

En python, ¿cuál es más rápido?numpy.max o max? ¿Cuál es más rápido?

numpy.max(), numpy.min() 

o

max(), min() 

Mi lista/longitud de la matriz varía de 2 a 600. ¿Cuál debo utilizar para ahorrar algo de tiempo de ejecución?

+3

que sin duda debe probar y descubrir por su situación específica, pero mi primer instinto es que dependería de si sus iterables son " vainilla "python iterables o numpy iterables. – jedwards

+6

Si los datos están en ** 'list' **, usaría vainilla' max'. Si están en un numpy ** 'array' ** Usaría' numpy.max'. Convertir una lista en una matriz numpy es una operación bastante costosa –

Respuesta

36

bien de mis tiempos se deduce si ya tiene variedad numpy a se debe utilizar a.max (la fuente dice que es lo mismo que si np.maxa.max disponible). Pero si tiene una lista incorporada, la mayoría de las veces toma convirtiendo en np.ndarray => es por eso que max es mejor en sus tiempos.

En esencia: si np.ndarray continuación a.max, si list y sin necesidad de toda la maquinaria de np.ndarray continuación norma max.

9

Probablemente sea mejor si utiliza algo como el Python timeit module para probarlo usted mismo. De esta forma, puede probar sus propios datos en su propio entorno, en lugar de depender de terceros con diversos datos y entornos de prueba que no son necesariamente representativos del suyo.

+2

Intenté eso en una lista aleatoria de 600 números de coma flotante. || np.max() + np.min() -> 1.093 mseg || max() + min() -> 0.092 mseg – Froyo

2

numpy.min y numpy.max tienen una semántica ligeramente diferente (y firmas de llamada) a los builtins, por lo que la elección no debe tener que ver con la velocidad. Use las versiones numpy si necesita poder manejar datos multidimensionales de manera sana. Si solo está usando listas de Python u otras cosas que desconocen la dimensionalidad, use las construcciones internas.

9

También me interesó esto y probé las tres variantes con perfplot (un pequeño proyecto mío). Resultado: no se va a equivocar con a.max().

enter image description here

Código para reproducir la trama:

import numpy 
import perfplot 

perfplot.show(
    setup=lambda n: numpy.random.rand(n), 
    kernels=[ 
     max, 
     numpy.max, 
     lambda a: a.max() 
     ], 
    labels=['max(a)', 'numpy.max(a)', 'a.max()'], 
    n_range=[2**k for k in range(20)], 
    logx=True, 
    logy=True, 
    xlabel='len(a)' 
    ) 
Cuestiones relacionadas