Saltar al contenido

Python: ¿Cuál es la diferencia entre math.exp y numpy.exp y por qué los creadores de numpy eligen introducir exp nuevamente?

Solución:

los math.exp funciona solo para escalares como menciona EdChum. Mientras que numpy.exp funcionará para matrices.

Ejemplo:

>>> import math
>>> import numpy as np
>>> x = [1.,2.,3.,4.,5.]
>>> math.exp(x)

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    math.exp(x)
TypeError: a float is required
>>> np.exp(x)
array([   2.71828183,    7.3890561 ,   20.08553692,   54.59815003,
        148.4131591 ])
>>> 

Es el mismo caso para otros math funciones.

>>> math.sin(x)

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    math.sin(x)
TypeError: a float is required
>>> np.sin(x)
array([ 0.84147098,  0.90929743,  0.14112001, -0.7568025 , -0.95892427])
>>> 

Consulte también ESTA RESPUESTA para ver cómo numpy es más rápido que math.

math.exp funciona en un solo número, la versión numpy funciona en matrices numpy y es tremendamente más rápida debido a los beneficios de la vectorización. los exp la función no está sola en esto – varios math funciones tienen numerosas contrapartes, como sin, powetc.

Considera lo siguiente:

In [10]: import math

In [11]: import numpy

In [13]: arr = numpy.random.random_integers(0, 500, 100000)

In [14]: %timeit numpy.exp(arr)
100 loops, best of 3: 1.89 ms per loop

In [15]: %timeit [math.exp(i) for i in arr]
100 loops, best of 3: 17.9 ms per loop

La versión numpy es ~ 9 veces más rápida (y probablemente se pueda hacer más rápida aún mediante una elección cuidadosa de bibliotecas matemáticas optimizadas)

Como indica @camz a continuación, el math La versión será más rápida cuando se trabaja con valores únicos (en una prueba rápida, ~ 7.5 veces más rápido).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *