[英]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.