python 如何使用具有numpy或scipy的正态分布,除了平均值和标准差之外,还使用最小值和最大值?

rdlzhqv9  于 2023-10-14  发布在  Python
关注(0)|答案(2)|浏览(98)

我需要在Python中使用正态分布。我不关心图形,我只想了解如何在numpy或scipy中应用它。有没有解决方案可以将我的练习逻辑应用到numpy,scipy或类似的东西上?
我在Stackoverflow和网络上寻找不同的解决方案,但没有一个符合我所寻找的,因为网络上的大多数结果报告平均值和标准差,而我有:averagestandard deviation,还有minimum valuemaximum value
我用numpy或scipy(我重复一遍,我不需要画图表)来展示一个问题(已经解决了,我不想寻找解决方案)。

问题-假设群体中个体的体重分布为高斯分布,mean µ = 61 kg和standard deviation σ = 5 kg

计算体重为between 59 kg和63 kg的个体百分比
解决方案:

[59, 63] = [(61− 0.4 * 5), (61 + 0.4 * 5)] = [59,63]
0.4 = 0.3108
0.3108 = 31%

在相应的统计表中,0.40.4对应于范围内的0.3108。因此,最后的结果,即体重在59公斤至63公斤之间的人的百分比将是31%

l7mqbcuq

l7mqbcuq1#

我不完全确定我的统计编码,但基于this Cross Validated question,我相信这将做到这一点:

import scipy
MEAN = 61
STD = 5

a_b = (59, 63)
percentage = scipy.stats.norm.cdf(a_b[1], loc=MEAN, scale=STD)-scipy.stats.norm.cdf(a_b[0], loc=MEAN, scale=STD)

print(percentage)

输出:

0.31084348322064836
eqqqjvef

eqqqjvef2#

帕勒姆的答案可能是最有效和最容易阅读的一个。但是如果你不想使用numpy或scipy,你也可以使用math模块中的误差函数erf(x)来完成计算。
同样,它使用两个累积密度函数(cdf)的差来找到两个值之间的“概率”。
也转换成百分比。

import math

def cdf( x, mu, sigma ):
    return 0.5 * ( 1 + math.erf( ( x - mu ) / ( sigma * math.sqrt( 2.0 ) ) ) )

mean, sd = 61.0, 5.0
percentage = 100.0 * ( cdf( 63.0, mean, sd ) - cdf( 59.0, mean, sd ) )
print( "Percentage = {:8.2f}".format( percentage ) )

输出量:

Percentage =    31.08

相关问题