Python: Quelle est la différence entre les maths.exp et numpy.exp et pourquoi ne numpy créateurs choisir d'introduire exp nouveau

exp signifie Fonction exponentielle

expmath module: https://docs.python.org/2/library/math.html

expnumpy module: http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html

Pourquoi numpy les créateurs introduisent de nouveau cette fonction?

19
demandé sur kyle 2015-06-08 17:51:07

2 réponses

math.exp ne fonctionne que pour les scalaires EdChum mentions. Alors que les numpy.exp fonctionne pour les tableaux.

Exemple:

>>> 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 ])
>>> 

C'est le même cas pour les autres math fonctions.

>>> 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])
>>> 

Aussi, reportez-vous à THIS ANSWER à vérifier comment numpy est plus rapide que math.

25
répondu ThePredator 2017-05-23 11:33:26

math.exp fonctionne sur un seul nombre, la version de numpy fonctionne sur les tableaux de numpy et est énormément plus rapide en raison des avantages de la vectorisation. exp la fonction n'est pas le seul dans ce cas - plusieurs math les fonctions ont des contreparties numpy, telles que sin,pow, etc.

Considérons le code suivant:

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 version numpy est ~9x plus rapide (et peut probablement être rendue plus rapide encore par un choix prudent de bibliothèques mathématiques optimisées)

comme le dit @camz ci - dessous le math version sera plus rapide quand on travaille sur des valeurs simples (dans un test rapide, ~7.5 x plus rapide).

7
répondu Chinmay Kanchi 2015-06-08 15:14:52