Dada una media y una varianza, ¿existe una llamada de función pylab simple que trazará una distribución normal?python pylab plot distribución normal
¿O tengo que hacer uno yo mismo?
Dada una media y una varianza, ¿existe una llamada de función pylab simple que trazará una distribución normal?python pylab plot distribución normal
¿O tengo que hacer uno yo mismo?
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()
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:
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
@Avaris: eso es increíble, gracias por la sugerencia. Editado mi respuesta. – lum
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. –
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)
¿Quiere decir -3 * sigma + mean, 3 * sigma + mean? – SeF
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()
Gracias por la corrección, @platinor. – unutbu
¡sus parámetros linspace son realmente raros! Es mejor hacer '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen
@Amen: Sí, gracias por la corrección. – unutbu