【问题标题】:Plotting of 1-dimensional Gaussian distribution function绘制一维高斯分布函数
【发布时间】:2013-01-30 03:49:03
【问题描述】:

如何使用均值和标准差参数值 (μ, σ) = (−1, 1)、(0, 2) 和 (2, 3) 绘制一维高斯分布函数图?

我是使用 Python 编程的新手。

提前谢谢你!

【问题讨论】:

标签: python plot gaussian


【解决方案1】:

拥有出色的 matplotlibnumpy 软件包

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()

会产生类似的东西

【讨论】:

  • 您的高斯 PDF 错误 - 您需要按 (\sqrt(2\pi)\sigma)^(-1) 缩放。此外,x*x 比 pow(x, 2) 快得多。
  • x轴不应该是-3到3吗?
  • @sinapan 是的,它应该(更新)。旧的 X 值是计数器,而不是 X 的值(即错误)。
【解决方案2】:

您可以阅读本教程,了解如何在 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))

【讨论】:

    【解决方案3】:

    基于原始语法并正确规范化的正确形式是:

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

    【讨论】:

    • 这是唯一与 scipy 匹配的规范化答案。需要加一对“np”,小数点是多余的1/(np.sqrt(2*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2)/2)
    • 终于有人记得分母中的π了!
    【解决方案4】:

    除了前面的答案,我建议先计算指数中的比率,然后取平方:

    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
    

    【讨论】:

      【解决方案5】:

      您的 gaussian() 函数的分母中缺少一个括号。就像现在一样,您除以 2 并乘以方差 (sig^2)。但这不是真的,正如您从图中看到的那样,方差越大,高斯越窄 - 这是错误的,应该是相反的。

      所以只需将 gaussian() 函数更改为:

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

      【讨论】:

      • 这个公式是错误的,因为如果你将它从负无穷积分到无穷大,你会得到不正确的 sqrt(2)*sqrt(pi)。正确的公式是 1/sqrt(2*pi)*exp(-x^2/2)。虽然,在这种形式中,它的均值是 0,方差是 1,你可以随意移动和缩放这个高斯
      猜你喜欢
      • 2013-04-14
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多