如何在Python中给定的平均,标准正态分布计算概率有多大? 根据就像这个问题的任择议定书的定义我总是明确编写我自己的函数做的: 计算一个随机变量的概率在Python中的分布
只是想知道如果有一个库函数调用可以让你做到这一点。 在我的想象它会是这样的:
nd = NormalDistribution(mu=100, std=12)
p = nd.prob(98)
有Perl中的一个类似的问题: 我如何计算在给定一个正态分布在Perl点的概率是多少? 。 但我没有看到一个在Python。
Numpy
具有random.normal
功能,但它像取样,不正是我想要的。
Answer 1:
还有一个在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
[有一两件事要提防的 - 只是一个提示 - 就是通过参数是一个小广阔。 的,因为代码被设置,如果意外写方式scipy.stats.norm(mean=100, std=12)
而不是scipy.stats.norm(100, 12)
或scipy.stats.norm(loc=100, scale=12)
那么它会接受它,而是默默地丢弃这些额外的关键字参数,并给你的默认值(0,1)。]
Answer 2:
Scipy.stats是一个伟大的模块。 只是提供了另一种方法,你可以直接用它计算
import math
def normpdf(x, mean, sd):
var = float(sd)**2
denom = (2*math.pi*var)**.5
num = math.exp(-(float(x)-float(mean))**2/(2*var))
return num/denom
这将使用中发现的公式在这里: http://en.wikipedia.org/wiki/Normal_distribution#Probability_density_function
去测试:
>>> normpdf(7,5,5)
0.07365402806066466
>>> norm(5,5).pdf(7)
0.073654028060664664
Answer 3:
下面是详细信息 。 首先,你正在处理一个冰冻分布(这种情况下,冻结其意味着参数设置为特定值)。 要创建一个冻结的分布:
import scipy.stats
scipy.stats.norm(loc=100, scale=12)
#where loc is the mean and scale is the std dev
#if you wish to pull out a random number from your distribution
scipy.stats.norm.rvs(loc=100, scale=12)
#To find the probability that the variable has a value LESS than or equal
#let's say 113, you'd use CDF cumulative Density Function
scipy.stats.norm.cdf(113,100,12)
Output: 0.86066975255037792
#or 86.07% probability
#To find the probability that the variable has a value GREATER than or
#equal to let's say 125, you'd use SF Survival Function
scipy.stats.norm.sf(125,100,12)
Output: 0.018610425189886332
#or 1.86%
#To find the variate for which the probability is given, let's say the
#value which needed to provide a 98% probability, you'd use the
#PPF Percent Point Function
scipy.stats.norm.ppf(.98,100,12)
Output: 124.64498692758187
Answer 4:
开始Python 3.8
,标准库提供了NormalDist
对象作为组成部分statistics
模块。
它可以用来获得概率密度函数 ( pdf
-可能性的随机样本X将为给定值x附近)对于给定的平均值 ( mu
)和标准偏差 ( sigma
):
from statistics import NormalDist
NormalDist(mu=100, sigma=12).pdf(98)
# 0.032786643008494994
还要注意的是NormalDist
对象还提供的累积分布函数 ( cdf
-概率随机样本X将小于或等于x):
NormalDist(mu=100, sigma=12).cdf(98)
# 0.43381616738909634
Answer 5:
从答案中提到维基百科中引用的公式不能被用于计算正常probabilites。 你将不得不写使用该公式以计算概率的数值积分逼近函数。
该公式计算用于所述概率密度函数的值。 由于正态分布是连续的,你要计算一个整体来获得概率。 维基百科的网站提到CDF,不具有正态分布的封闭形式。
Answer 6:
我写了这个程序,做数学题给你。 只需在汇总统计进入。 无需提供一个数组:
单样本Z检验了人口比例:
为了均值做到这一点,而不是比例,相应地更改公式针对z
Answer 7:
你可以只使用内置的以数学函数库,影响其作为规定的误差函数网站 。
文章来源: Calculate probability in normal distribution given mean, std in Python