繁体   English   中英

如何围绕特定均值生成随机整数?

[英]How to generate random int around specific mean?

我需要生成介于23和72之间的100个年龄值,平均值必须为42岁。

您认为标准python中已经存在这样的功能吗? 如果没有,我想我足够了解python并且应该能够对算法进行编码,但是我希望已经有了一些可用的东西。 有什么提示吗?

我认为您可以将所有42填充为大小为100的数组。

然后随机选择两个索引,检查它们的值,如果可以接受,将其调整为1。

我只是在这里猜测,但这是我所做的,不是很确定最终的分布是什么,但是平均数已经死了,并且盯着它看起来相当均匀地覆盖范围的值...对不起,它太乱了,但我只是我想在下班前很快把东西放在一起!

def age_arr():
    age_A = []
    for _i in range(100):
        age_A.append(42)

    for _i in range(100000):
        rand_ind_1 = randint(0,99)
        rand_ind_2 = randint(0,99)

        val_1 = age_A[rand_ind_1] #Subtract from
        val_2 = age_A[rand_ind_2] #Add to

        if val_1 == 23 or val_2 == 72:
            age_A[rand_ind_1] += 1
            age_A[rand_ind_2] -= 1

        age_A[rand_ind_1] -= 1
        age_A[rand_ind_2] += 1
    sum = 0
    for val in age_A:
        sum += val
    print(age_A)
    print('Average: ' + str(sum/100))

输出:

[29, 27, 51, 68, 28, 40, 72, 42, 41, 31, 59, 46, 61, 52, 43, 26, 34, 29, 41, 23,
 37, 27, 45, 23, 49, 43, 28, 24, 60, 43, 65, 57, 27, 46, 35, 52, 23, 34, 47, 39,
 64, 52, 46, 48, 30, 27, 23, 30, 57, 34, 46, 26, 29, 30, 55, 72, 34, 52, 66, 38,
 69, 34, 24, 40, 39, 59, 67, 39, 39, 26, 70, 36, 31, 50, 29, 59, 64, 52, 40, 33,
 62, 32, 53, 41, 45, 24, 47, 27, 23, 39, 68, 24, 34, 36, 56, 36, 32, 49, 40, 26]
Average: 42.0

就在这里。 它是random.triangular(min, max, av)

您的平均值将接近,但不等于av。

编辑:请参阅下面的评论,这有缺点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM