2012-04-13 84 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()