如果給出的平均值和標準差定義爲normal distribution,那麼如何計算純Python中的以下概率(即沒有Numpy/Scipy或其他包不在標準庫中)?在Python中分佈隨機變量的概率計算
- 隨機變量r的概率r < x或r < = x。
- 隨機變量r的概率,其中r> x或r> = x。
- 隨機變量r的概率,其中x> r> y。
我發現了一些庫,例如Pgnumerics,它們提供了計算這些函數的函數,但底層數學對我來說還不清楚。
編輯:爲了表明這不是作業,下面發佈的是我的工作代碼Python < = 2.6,儘管我不確定它是否能正確處理邊界條件。
from math import *
import unittest
def erfcc(x):
"""
Complementary error function.
"""
z = abs(x)
t = 1./(1. + 0.5*z)
r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
t*(.09678418+t*(-.18628806+t*(.27886807+
t*(-1.13520398+t*(1.48851587+t*(-.82215223+
t*.17087277)))))))))
if (x >= 0.):
return r
else:
return 2. - r
def normcdf(x, mu, sigma):
t = x-mu;
y = 0.5*erfcc(-t/(sigma*sqrt(2.0)));
if y>1.0:
y = 1.0;
return y
def normpdf(x, mu, sigma):
u = (x-mu)/abs(sigma)
y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
return y
def normdist(x, mu, sigma, f):
if f:
y = normcdf(x,mu,sigma)
else:
y = normpdf(x,mu,sigma)
return y
def normrange(x1, x2, mu, sigma, f=True):
"""
Calculates probability of random variable falling between two points.
"""
p1 = normdist(x1, mu, sigma, f)
p2 = normdist(x2, mu, sigma, f)
return abs(p1-p2)
這就是分配的累積分配函數給你的。你鏈接的文章給出了這個正態分佈 – 2012-02-25 21:34:15