scipy 创建截断正态随机变量时出现问题

tktrz96b  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(192)

如果这是一个愚蠢的问题,我很抱歉。我正在尝试做一些我认为很简单的事情。创建一个由给定均值和std_dev的上限和下限限定的值范围:
我使用的是scipy.stats.truncnorm

r = truncnorm.rvs(a, b, loc=0, scale=1, size=1, random_state=None)

我认为我应用了错误的函数,因为我完全不知道如何解释从我提供的输入中获得的值

a (lower bound) = 20.9
b (upper bound) = 46.5
x_avg (mean) = 29.8
x_std (std_dev) = 4.5

size (# of values) = 20

r = truncnorm.rvs(a, b, x_avg, x_std, size)

array([123.98250345, 124.32804805, 123.98434454, 123.86675932,
       124.2113707 , 123.85307689, 124.06329418, 124.32192561,
       124.04215402, 124.00524577, 124.00042372, 123.87499012,
       124.13146939, 123.94714796, 124.13634181, 123.9475407 ,
       124.14616414, 123.85190967, 124.29072561, 124.02151428])

我会想象我会得到20个值挤在我提供的平均值周围,但相反,他们都挤在123周围...请帮助

8tntrjer

8tntrjer1#

参数ab不是边界。

a, b = (myclip_a - loc) / scale, (myclip_b - loc) / scale

因此,遵循docs符号:

myclip_a = 20.9
myclip_b = 46.5
loc = 29.8
scale = 4.5

a, b = (myclip_a - loc) / scale, (myclip_b - loc) / scale

truncnorm.rvs(a, b, loc, scale, size=20)

给予

array([29.78710758, 29.61708513, 25.92957773, 39.12850079, 35.39048686,
       27.90837582, 31.68381045, 27.66714137, 23.968335  , 31.75038033,
       26.74734003, 33.02933497, 21.98563681, 31.95292654, 27.02312225,
       34.61312831, 22.8792215 , 34.76698613, 24.38504279, 24.28014787])

文档可能会更清楚一点--你必须转到truncnorm的文档字符串,才能发现ab本质上是Z值,用正态分布术语来说。

相关问题