Est-il facilement accessible de la mise en œuvre de l'erf() de Python?
Je peux mettre en œuvre la fonction d'erreur, erf, moi-même, mais je préfère ne pas le faire. Est-il un paquet python sans dépendances externes qui contient une implémentation de cette fonction? J'ai trouvé cette mais ce qui semble être une partie de certains beaucoup plus grand ensemble (et il n'est même pas clair lequel!).
Vous devez vous connecter pour publier un commentaire.
Depuis la v. 2.7. la norme mathématiques module contient erf fonction. Ce devrait être le moyen le plus facile.
http://docs.python.org/2/library/math.html#math.erf
Je recommande SciPy pour les fonctions numériques en Python, mais si vous voulez quelque chose avec plus de dépendances, voici une fonction avec un message d'erreur d'erreur est de moins de 1,5 * 10-7 pour toutes les entrées.
L'algorithme vient de Manuel des Fonctions Mathématiques, formule 7.1.26.
Je vous recommande de télécharger numpy (pour avoir efficace la matrice en python) et scipy (une boîte à outils Matlab substitut, qui utilise numpy). Le fer de la fonction se trouve dans scipy.
Vous pouvez également utiliser le fer de la fonction définie dans pylab, mais c'est plus destiné à comploter les résultats de choses que vous calculez avec numpy et scipy. Si vous voulez un tout-en-un
l'installation de ces logiciels, vous pouvez utiliser directement le Python Enthought de distribution.
Un pur python de mise en œuvre peuvent être trouvés dans la mpmath module (http://code.google.com/p/mpmath/)
De la doc de la chaîne:
Pour les grandes réel
x
,\mathrm{erf}(x)
approches 1 trèsrapidement::
L'erreur est une fonction impaire::
:func:
erf
met en œuvre une précision arbitraire de l'évaluation et deprend en charge les nombres complexes::
Fonctions liées à la
Voir aussi :func:
erfc
, ce qui est plus précis pour les grandesx
,et :func:
erfi
qui donne la antiderivative de\exp(t^2)
.Les intégrales de Fresnel :func:
fresnels
et :func:fresnelc
sont également liées à la fonction d'erreur.
Pour répondre à ma propre question, j'ai fini par utiliser le code suivant, adapté d'une version de Java que j'ai trouvé ailleurs sur le web:
from math import erf
(pour la portabilité, la précision, la vitesse, etc.)J'ai une fonction qui ne 10^5 erf appels. Sur ma machine...
scipy.spécial.erf en fait de temps à 6,1 s
erf Manuel des Fonctions Mathématiques prend 8.3 s
erf Numérique Recettes 6.2 prend 9.5 s
(trois-run moyennes, code d'affiches ci-dessus).
erf
fonction? Avec la configuration suivante:from scipy.special import erf; import numpy as np; data = np.random.randn(10e5)
, je reçois très rapide en temps d'exécution à partir de:result = erf(data)
. En particulier, je reçois 32ms par boucle dans ce cas. La seule manière pour moi runtimes > 1s est si j'ai naïvement en boucle sur tous les éléments dans unnumpy
tableau.Une remarque pour ceux qui ont des pour de meilleures performances: vectoriser, si possible.
donne des résultats