2012-04-13 40 views

Trả lời

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

Cảm ơn bạn đã sửa, @platinor. – unutbu

+0

thông số linspace của bạn thực sự kỳ lạ! Tốt hơn để làm '' 'x = np.linspace (mu - 4 * sigma, mu + 4 * sigma, 100)' '' – Amen

+0

@Amen: Vâng, cảm ơn cho sự điều chỉnh. – unutbu

29

Tôi không nghĩ rằng có một chức năng nào tất cả những gì trong một cuộc gọi duy nhất. Tuy nhiên, bạn có thể tìm thấy hàm mật độ xác suất Gaussian trong scipy.stats.

Vì vậy, cách đơn giản nhất tôi có thể đưa ra là:

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

Nguồn:

+2

Bạn không cần sử dụng tính năng hiểu danh sách. 'norm.pdf' có thể hoạt động trên' numpy.array'. Vì vậy, bạn có thể viết 'plt.plot (range, norm.pdf (range, 0, 2))'. – Avaris

+0

@Avaris: thật tuyệt vời, cảm ơn mẹo. Đã chỉnh sửa câu trả lời của tôi. – lum

+0

Có lẽ bạn nên thay đổi 'norm.pdf' thành' norm (0, 1) .pdf'. Điều này giúp dễ dàng điều chỉnh các trường hợp khác/để hiểu rằng điều này tạo ra một đối tượng biểu diễn một biến ngẫu nhiên. –

5

Unutbu câu trả lời là chính xác. Nhưng becouse trung bình của chúng tôi có thể nhiều hơn hoặc ít hơn không tôi vẫn muốn thay đổi điều này:

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

này:

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

Bạn có nghĩa là -3 * sigma + có nghĩa là, 3 * sigma + nghĩa là gì? – SeF

1

Nếu bạn thích sử dụng một từng bước tiếp cận bạn có thể xem xét một giải pháp như sau

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() 
Các vấn đề liên quan