Python: Quelle est la différence entre les maths.exp et numpy.exp et pourquoi ne numpy créateurs choisir d'introduire exp nouveau
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
.
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).