Как сделать графики одномерной гауссовой функции распределения с использованием значений среднего и стандартного отклонения (μ, σ) = (-1, 1), (0, 2) и (2, 3)?
Я новичок в программировании, используя Python.
Заранее благодарю вас!
Как сделать графики одномерной гауссовой функции распределения с использованием значений среднего и стандартного отклонения (μ, σ) = (-1, 1), (0, 2) и (2, 3)?
Я новичок в программировании, используя Python.
Заранее благодарю вас!
С отличными пакетами matplotlib
и 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.)))
for mu, sig in [(-1, 1), (0, 2), (2, 3)]:
mp.plot(gaussian(np.linspace(-3, 3, 120), mu, sig))
mp.show()
создаст нечто вроде
Также - www.whathaveyoutried.com иногда я чувствую себя такой домашней кружкой.
вы можете прочитать это руководство по использованию функций статистических распределений в 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))
Вам не хватает скобок в знаменателе вашей функции gaussian(). Поскольку это прямо сейчас, вы делите на 2 и умножьте на дисперсию (sig ^ 2). Но это неверно, и, как вы можете видеть ваши сюжеты, большая дисперсия, тем более узкая гауссова - это неправильно, она должна быть противоположной.
Итак, просто измените функцию gaussian() на:
def gaussian(x, mu, sig):
return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
Правильная форма, основанная на исходном синтаксисе, и правильная нормализация:
def gaussian(x, mu, sig):
return 1./(sqrt(2.*pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)
В дополнение к предыдущим ответам, я рекомендую сначала рассчитать отношение в экспоненте, а затем взять квадрат:
def gaussian(x,x0,sigma):
return np.exp(-np.power((x - x0)/sigma, 2.)/2.)
Таким образом, вы можете также рассчитать гауссов очень маленьких или очень больших чисел:
In: gaussian(1e-12,5e-12,3e-12)
Out: 0.64118038842995462