如何使用均值和标准差参数值 (μ, σ) = (−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.)))
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()
您可以阅读本教程,了解如何在 python 中使用统计分布函数。 https://docs.scipy.org/doc/scipy/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))
基于原始语法并正确规范化的正确形式是:
def gaussian(x, mu, sig):
return 1./(np.sqrt(2.*np.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
您的 gaussian() 函数的分母中缺少一个括号。就像现在一样,您除以 2 并乘以方差 (sig^2)。但这不是真的,正如你从你的情节中看到的那样,方差越大,高斯越窄——这是错误的,它应该是相反的。
所以只需将 gaussian() 函数更改为:
def gaussian(x, mu, sig):
return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))