Python: Quelle est la différence entre les mathématiques.exp et de numpy.exp et pourquoi ne numpy créateurs choisir d'introduire exp nouveau
exp
signifie fonction exponentielle
exp
dans math module
: https://docs.python.org/2/library/math.html
exp
dans numpy module
: http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html
Pourquoi ne numpy
créateurs d'introduire cette fonction?
- Le numpy l'on accepte un tableau, des mathématiques, de la version de travail sur un scalaire type d'objet uniquement. Le numpy exécuter
exp
sur l'ensemble de la matrice, c'est une méthode vectorielle de l'exécution de la fonction sur l'ensemble de la matrice c'est ce qu'il est conçu pour numpy.exp()
peut être appelé sur le tableau et il y a une bonne chance de calcul va être mis en parallèle (comme beaucoup de vecteur / matrice opérations dans numpy). Ce gain est une des principales raisons pour ce genre de bibliothèques en premier lieu.- si vous pensez que ma réponse a résolu votre question, pls accepter
Vous devez vous connecter pour publier un commentaire.
La
math.exp
ne fonctionne que pour les scalaires comme EdChum mentionne. Alors quenumpy.exp
de travail pour les tableaux.Exemple:
C'est le même cas pour les autres
math
fonctions.Également se référer à CETTE RÉPONSE pour vérifier comment
numpy
est plus rapide quemath
.math.exp
fonctionne sur un numéro unique, le numpy version fonctionne sur les tableaux numpy et est extrêmement rapide grâce aux avantages de la vectorisation. Leexp
fonction n'est pas le seul dans ce cas - plusieursmath
fonctions ont numpy homologues, tels quesin
,pow
, etc.De considérer les éléments suivants:
La numpy version est ~9x plus rapide (et sans doute peut être effectuée plus rapidement encore, par un choix judicieux de la optimisé bibliothèques de mathématiques)
Comme @camz états - dessous de la
math
version sera plus rapide lorsque vous travaillez sur des valeurs uniques (dans un test rapide, ~7,5 x plus rapide).Si vous vectoriser manuellement les mathématiques.exp à l'aide de la carte, il est plus rapide que numpy. Autant que j'ai testé..
%timeit np.exp(arr)
500 µs ± 3.37 µs par boucle (moyenne ± std. dev. de 7 pistes, 1000 boucles de chaque)
%timeit carte(math.exp, arr.)
148 ns ± 4 ns par boucle (moyenne ± std. dev. de 7 pistes, 10000000 boucles de chaque)