绘制一维高斯分布函数

pyt*_*bie 16 python plot gaussian

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

我是使用Python编程的新手.

先感谢您!

dan*_*van 35

随着优秀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()
Run Code Online (Sandbox Code Playgroud)

会产生类似的东西 情节显示由matplotlib生产的一维高斯

  • 您的高斯PDF错误 - 您需要按(\ sqrt(2\pi)\ sigma)^( - 1)进行缩放.另外,x*x比pow(x,2)快得多. (23认同)

XVa*_*ted 14

你可以阅读本教程,了解如何在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))
Run Code Online (Sandbox Code Playgroud)


小智 9

基于原始语法并正确规范化的正确表单是:

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


Fel*_*lix 7

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

def gaussian(x,x0,sigma):
  return np.exp(-np.power((x - x0)/sigma, 2.)/2.)
Run Code Online (Sandbox Code Playgroud)

这样,您还可以计算非常小或非常大的高斯数:

In: gaussian(1e-12,5e-12,3e-12)
Out: 0.64118038842995462
Run Code Online (Sandbox Code Playgroud)


小智 6

您在gaussian()函数的分母中缺少一个parantheses.就像现在一样,你除以2并乘以方差(sig ^ 2).但事实并非如此,你可以看到你的情节越大,高斯越窄 - 这是错误的,它应该是对立的.

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

def gaussian(x, mu, sig):
    return np.exp(-np.power(x - mu, 2.) / (2 * np.power(sig, 2.)))
Run Code Online (Sandbox Code Playgroud)