2012-04-13 23 views

Respuesta

100
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.mlab as mlab 
import math 

mu = 0 
variance = 1 
sigma = math.sqrt(variance) 
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100) 
plt.plot(x,mlab.normpdf(x, mu, sigma)) 
plt.show() 

gass distro, mean is 0 variance 1

+0

Gracias por la corrección, @platinor. – unutbu

+0

¡sus parámetros linspace son realmente raros! Es mejor hacer '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen

+0

@Amen: Sí, gracias por la corrección. – unutbu

29

Yo no creo que es una función que hace todo eso en una sola llamada. Sin embargo, puede encontrar la función de densidad de probabilidad gaussiana en scipy.stats.

Así que la forma más simple que podía llegar a decir:

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

# Plot between -10 and 10 with .001 steps. 
x_axis = np.arange(-10, 10, 0.001) 
# Mean = 0, SD = 2. 
plt.plot(x_axis, norm.pdf(x_axis,0,2)) 

Fuentes:

+2

No es necesario que use la lista de comprensión. 'norm.pdf' puede funcionar en' numpy.array'. Entonces, puedes escribir 'plt.plot (rango, norma.pdf (rango, 0, 2))'. – Avaris

+0

@Avaris: eso es increíble, gracias por la sugerencia. Editado mi respuesta. – lum

+0

Probablemente deberías cambiar 'norm.pdf' por' norma (0, 1) .pdf'. Esto facilita el ajuste a otros casos/para comprender que esto genera un objeto que representa una variable aleatoria. –

5

La respuesta de Unutbu es correcta. Pero porque nuestra media puede ser mayor o menor que cero todavía me gustaría cambiar esto:

x = np.linspace(-3 * sigma, 3 * sigma, 100) 

a esto:

x = np.linspace(-3 * sigma + mean, 3 * sigma + mean, 100) 
+1

¿Quiere decir -3 * sigma + mean, 3 * sigma + mean? – SeF

1

Si prefiere utilizar un enfoque paso a paso usted podría considerar una solución como la siguiente

import numpy as np 
import matplotlib.pyplot as plt 

mean = 0; std = 1; variance = np.square(std) 
x = np.arange(-5,5,.01) 
f = np.exp(-np.square(x-mean)/2*variance)/(np.sqrt(2*np.pi*variance)) 

plt.plot(x,f) 
plt.ylabel('gaussian distribution') 
plt.show() 
Cuestiones relacionadas