2013-02-14 62 views
10

मैं औसत और मानक विचलन पैरामीटर मान (μ, σ) = (-1, 1), (0, 2) का उपयोग करके 1-आयामी गॉसियन वितरण फ़ंक्शन के भूखंड कैसे बना सकता हूं , और (2, 3)?1-आयामी गॉसियन वितरण फ़ंक्शन का प्लॉटिंग

मैं पायथन का उपयोग करके प्रोग्रामिंग के लिए नया हूं।

अग्रिम धन्यवाद!

उत्तर

21

उत्कृष्ट matplotlib और numpy संकुल

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

for mu, sig in [(-1, 1), (0, 2), (2, 3)]: 
    mp.plot(gaussian(np.linspace(-3, 3, 120), mu, sig)) 

mp.show() 

के साथ की तरह plot showing gaussians of varying widths in varying colours

इसके अलावा कुछ का उत्पादन करेगा - www.whathaveyoutried.com कभी कभी मैं इस तरह के एक होमवर्क मग की तरह लग रहा है।

+13

आपका गाऊशियन पीडीएफ गलत है - आपको (\ sqrt (2 \ pi) \ sigma)^(- 1) द्वारा स्केल करने की आवश्यकता है। इसके अतिरिक्त, x * x पाउ (x, 2) से बहुत तेज है। –

8

आप अपने gaussian() फ़ंक्शन के denominator में एक parantheses खो रहे हैं। जैसा कि अभी यह है कि आप 2 से विभाजित होते हैं और भिन्नता (एसआईजी^2) के साथ गुणा करते हैं। लेकिन यह सच नहीं है और जैसा कि आप अपने भूखंडों को देख सकते हैं उतना अधिक भिन्नता जितना अधिक गॉसियन है - जो गलत है, इसका विरोध होना चाहिए।

तो बस के लिए गाऊसी() फ़ंक्शन बदलने के लिए:

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

यह सूत्र गलत है क्योंकि यदि आप इसे शून्य से अनंत से अनंत तक एकीकृत करते हैं तो आपको sqrt (2) * sqrt (pi) मिल जाएगा जो सही नहीं है। सही सूत्र 1/वर्ग (2 * पीआई) * एक्सपी (-x^2/2) है। हालांकि, इस रूप में, इसका मतलब 0 है और भिन्नता 1 है, आप इस गाऊशियन को अपनी पसंद के अनुसार स्थानांतरित और स्केल कर सकते हैं – Evgeny

9

आप कैसे अजगर में सांख्यिकीय वितरण के कार्यों का उपयोग करने के लिए इस ट्यूटोरियल पढ़ सकते हैं।

def gaussian(x,x0,sigma): 
    return np.exp(-np.power((x - x0)/sigma, 2.)/2.) 

इस तरह, आप भी बहुत छोटे या की गाऊसी गणना कर सकते हैं: 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)) 
4

पिछले जवाब के अलावा, मैं पहली बार, प्रतिपादक में अनुपात की गणना करने के लिए तो वर्ग लेने की सिफारिश बहुत बड़ी संख्या:

In: gaussian(1e-12,5e-12,3e-12) 
Out: 0.64118038842995462 
5

सही रूप, मूल वाक्य रचना पर आधारित है, और सही ढंग से सामान्यीकृत है:

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