用给定的均值计算正态分布的概率,标准偏差为Python

如何计算正态分布的概率给定的意思,标准为Python? 在这个问题中,我可以根据定义像OP那样定义自己的函数: 计算Python中的随机variables的概率

只是想知道是否有一个库函数调用将允许你这样做。 在我的想象中会这样:

nd = NormalDistribution(mu=100, std=12) p = nd.prob(98) 

在Perl中有一个类似的问题: 我怎样才能计算一个给定在Perl正常分布点的概率? 。 但我没有看到一个在Python中。

Numpy有一个random.normal函数,但它像抽样,不完全是我想要的。

有一个在scipy.stats :

 >>> import scipy.stats >>> scipy.stats.norm(0, 1) <scipy.stats.distributions.rv_frozen object at 0x928352c> >>> scipy.stats.norm(0, 1).pdf(0) 0.3989422804014327 >>> scipy.stats.norm(0, 1).cdf(0) 0.5 >>> scipy.stats.norm(100, 12) <scipy.stats.distributions.rv_frozen object at 0x928352c> >>> scipy.stats.norm(100, 12).pdf(98) 0.032786643008494994 >>> scipy.stats.norm(100, 12).cdf(98) 0.43381616738909634 >>> scipy.stats.norm(100, 12).cdf(100) 0.5 

[有一点要小心 – 只是一个提示 – parameter passing有一点宽泛。 由于代码的设置方式,如果不小心写了scipy.stats.norm(mean=100, std=12)而不是scipy.stats.norm(100, 12) scipy.stats.norm(loc=100, scale=12) scipy.stats.norm(100, 12)或者scipy.stats.norm(loc=100, scale=12) ,那么它会接受它,但默默地放弃这些额外的关键字参数,并给你默认(0,1)。]

Scipy.stats是一个很好的模块。 只是提供另一种方法,你可以直接使用它来计算它

 import math def normpdf(x, mean, sd): var = float(sd)**2 pi = 3.1415926 denom = (2*pi*var)**.5 num = math.exp(-(float(x)-float(mean))**2/(2*var)) return num/denom 

这使用在这里find的公式: http : //en.wikipedia.org/wiki/Normal_distribution#Probability_density_function

去testing:

 >>>normpdf(7,5,5) 0.073654028688865794 >>> norm(5,5).pdf(7) 0.073654028060664664 

正如他们的网站所述,您可以使用内置于math库中的错误函数。

在答案中提到的维基百科引用的公式不能用来计算正常概率。 您将不得不使用该公式编写数值积分逼近函数来计算概率。

该公式计算概率密度函数的值。 由于正态分布是连续的,所以你必须计算积分来得到概率。 维基百科网站提到了CDF,它没有正式发行的封闭forms。