2012-04-13 62 views

回答

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

gass distro, mean is 0 variance 1

+0

感谢您的更正,@ platinor。 – unutbu 2012-07-30 08:52:04

+0

你的linspace参数真的很奇怪!最好做'''x = np.linspace(mu - 4 * sigma,mu + 4 * sigma,100)''' – Amen 2017-10-15 22:05:45

+0

@Amen:是的,谢谢你的纠正。 – unutbu 2017-10-15 22:17:27

29

我不认为有是做所有,在一个单一的通话功能。但是,您可以在scipy.stats中找到高斯概率密度函数。

所以我能想出的最简单方法是:

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

来源:

+2

您不需要使用列表理解。 'norm.pdf'可以在'numpy.array'上工作。所以,你可以写'plt.plot(range,norm.pdf(range,0,2))'。 – Avaris 2012-04-13 09:41:14

+0

@Avaris:太棒了,谢谢你的提示。编辑我的答案。 – lum 2012-04-13 09:47:46

+0

你应该把'norm.pdf'改成'norm(0,1).pdf'。这样可以更容易地适应其他情况/理解这会产生表示随机变量的对象。 – 2017-01-09 10:37:16

5

Unutbu的回答是正确的。 但becouse我们平均可多于或少于零我还是想改变这一点:

x = np.linspace(-3 * sigma, 3 * sigma, 100) 

这样:

x = np.linspace(-3 * sigma + mean, 3 * sigma + mean, 100) 
+1

你的意思是-3 * sigma + mean,3 * sigma +是什么意思? – SeF 2017-08-24 10:47:01

1

如果你喜欢使用一个循序渐进的方式,你可以考虑像下面的解决方案

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