web-dev-qa-db-fra.com

Tracé de la fonction de distribution gaussienne unidimensionnelle

Comment puis-je faire des graphiques d'une fonction de distribution gaussienne à une dimension en utilisant les valeurs des paramètres de moyenne et d'écart type (μ, σ) = (−1, 1), (0, 2) et (2, 3)?

Je suis nouveau dans la programmation, en utilisant Python.

Merci d'avance!

16
pythonnewbie

Avec les excellents packages matplotlib et numpy

from matplotlib import pyplot as mp
import numpy as np

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))

x_values = np.linspace(-3, 3, 120)
for mu, sig in [(-1, 1), (0, 2), (2, 3)]:
    mp.plot(x_values, gaussian(x_values, mu, sig))

mp.show()

produira quelque chose comme plot showing one-dimensional gaussians produced by matplotlib

32
danodonovan

vous pouvez lire ce tutoriel pour savoir comment utiliser les fonctions de distributions statistiques en python. http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

from scipy.stats import norm
import matplotlib.pyplot as plt
import numpy as np 

#initialize a normal distribution with frozen in mean=-1, std. dev.= 1
rv = norm(loc = -1., scale = 1.0)
rv1 = norm(loc = 0., scale = 2.0)
rv2 = norm(loc = 2., scale = 3.0)

x = np.arange(-10, 10, .1)

#plot the pdfs of these normal distributions 
plt.plot(x, rv.pdf(x), x, rv1.pdf(x), x, rv2.pdf(x))
14
XValidated

La forme correcte, basée sur la syntaxe d'origine et correctement normalisée est:

def gaussian(x, mu, sig):
    return 1./(sqrt(2.*pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)
8
ryanmartinneutrino

En plus des réponses précédentes, je recommande de calculer d'abord le rapport dans l'exposant, puis de prendre le carré:

def gaussian(x,x0,sigma):
  return np.exp(-np.power((x - x0)/sigma, 2.)/2.)

De cette façon, vous pouvez également calculer la gaussienne de très petits ou très grands nombres:

In: gaussian(1e-12,5e-12,3e-12)
Out: 0.64118038842995462
7
Felix

Il vous manque une parenthèse dans le dénominateur de votre fonction gaussienne (). Comme c'est le cas maintenant, vous divisez par 2 et multipliez avec la variance (sig ^ 2). Mais ce n'est pas vrai et comme vous pouvez le voir sur vos graphiques, plus la variance est grande, plus la gaussienne est étroite - ce qui est faux, elle devrait être opposée.

Il suffit donc de changer la fonction gaussian () en:

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
6
cvt1982