提问人:Horiatiki 提问时间:10/14/2023 最后编辑:Horiatiki 更新时间:10/14/2023 访问量:141
如何使用带有 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?
问:
我需要在 Python 中使用正态分布。我不关心图表,我只想了解如何在numpy或scipy中应用它。有什么解决方案可以将我的练习逻辑应用于 numpy、scipy 或类似内容?
我在 Stackoverflow 和 Web 上寻找不同的解决方案,但它们都与我正在寻找的解决方案不符,因为 Web 上的大多数结果都报告了平均值和标准偏差,而我有:、、以及 a 和 a .average
standard deviation
minimum value
maximum value
我举个例子展示了我正在用numpy或scipy寻找其应用程序的问题(已经解决了,我不是在寻找解决方案)(我再说一遍,我不需要绘制图表)。
问题 - 假设种群中个体权重的分布是高斯的,有 kg 和 kgmean µ = 61
standard deviation σ = 5
计算体重为 kg 和 kg 的个体的百分比between 59
63
溶液:
[59, 63] = [(61− 0.4 * 5), (61 + 0.4 * 5)] = [59,63]
0.4 = 0.3108
0.3108 = 31%
在相应的统计表中,并对应在范围内。因此,最终结果,即体重在 59 公斤到 63 公斤之间的个体的百分比,将是0.4
0.4
0.3108
31%
答:
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
你的回答非常有趣,谢谢。投票
评论