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

How to use a Normal Distribution with numpy or scipy which, in addition to the mean and standard deviation, also uses the minimum and maximum value?

提问人:Horiatiki 提问时间:10/14/2023 最后编辑:Horiatiki 更新时间:10/14/2023 访问量:141

问:

我需要在 Python 中使用正态分布。我不关心图表,我只想了解如何在numpy或scipy中应用它。有什么解决方案可以将我的练习逻辑应用于 numpy、scipy 或类似内容?

我在 Stackoverflow 和 Web 上寻找不同的解决方案,但它们都与我正在寻找的解决方案不符,因为 Web 上的大多数结果都报告了平均值和标准偏差,而我有:、、以及 a 和 a .averagestandard deviationminimum valuemaximum value

我举个例子展示了我正在用numpy或scipy寻找其应用程序的问题(已经解决了,我不是在寻找解决方案)(我再说一遍,我不需要绘制图表)。

问题 - 假设种群中个体权重的分布是高斯的,有 kg 和 kgmean µ = 61standard deviation σ = 5

计算体重为 kg 和 kg 的个体的百分比between 5963

溶液:

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

在相应的统计表中,并对应在范围内。因此,最终结果,即体重在 59 公斤到 63 公斤之间的个体的百分比,将是0.40.40.310831%

蟒蛇 python-3.x numpy 数学 scipy

评论

0赞 Parham 10/14/2023
也许这个问题对 stats.stackexchange.com/questions/482730/ 有帮助......
0赞 Frimand 10/14/2023
@Parham我不相信。我不需要数学或统计解决方案。我写了数学问题(已解决)只是一个例子,以了解我需要什么 Numpy 或 Scipy :)
0赞 Parham 10/14/2023
您不是在寻找计算曲线下面积的编程解决方案吗?
0赞 Malcolm 10/14/2023
概率的一般答案是它们在曲线下的面积,因此引用@Parham答案是解决方案。请参阅ansswer末尾的公式。
1赞 Malcolm 10/14/2023
在您的“解决方案”中,您需要获取 0.4 -> 0.3108 映射。这就是 CDF 带给你的。

答:

2赞 Parham 10/14/2023 #1

不完全确定我的统计编码,但基于这个交叉验证的问题,我相信这将解决问题:

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

评论

0赞 Frimand 10/14/2023
我不确定你的答案,但最终结果是正确的(0.3108)。所以我认为你的答案是对的。我也想等待别人的评论,但我认为你的答案是正确的。与此同时,我投票给了你。谢谢:)
0赞 Frimand 10/14/2023
请好奇一下:如果我不想使用“之间”,但如果我只想使用“> 59”,因此想删除 63,我该怎么做?
1赞 Parham 10/14/2023
我相信那将是:)1-scipy.stats.norm.cdf(59, loc=MEAN, scale=STD))
0赞 Frimand 10/14/2023
好的,好的,谢谢。但是在您的主要解决方案中,代码是 >= 1?我想知道 1 是否也“等于 1”,而不仅仅是 1 >
0赞 Parham 10/14/2023
对不起,我不确定我是否在关注,@Horiatiki,但 CDF 返回一个概率,因此最多为 1。这能清除它吗?
2赞 lastchance 10/14/2023 #2

帕勒姆的答案可能是最有效和最容易阅读的答案。但是,如果您不想使用 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

评论

0赞 Frimand 10/14/2023
你的回答非常有趣,谢谢。投票