我有一个号码列表:h=[5, 6, 5, 6, 6, 6, 6, 6]。我必须使用概率分布来给出这个列表h中的多样性。如何使用概率分布将列表中的每个数字的附加值添加到0.3到2之间?所以我会得到一些随机值,比如h=[5.3, 6.7, 6, 6.6, 6.3, 6.0, 7.1, 8]
发布于 2020-01-16 04:16:01
如果该范围内的每个值都应该具有相同的概率,那么您可以这样做:
import random
h = [ value + random.uniform(0.3, 2) for value in h ]如果您想像在示例中那样舍入到单个十进制,可以在其中添加一个round函数调用:
h = [ value + round(random.uniform(0.3, 2), 1) for value in h ]如果您想要的是正态分布,那么它是不受定义限制的,所以严格的值范围是没有意义的。但是,您可以配置标准差,以便绝大多数值都在特定的范围内。例如,您可以这样做:
low = 0.3
high = 2
mean = (low + high) / 2
standard_deviation = (high - mean) / 3
h = [ value + random.normalvariate(mean, standard_deviation) for value in h ]因为在计算标准差时,我们用3除以3,所以界(0.3和2)离平均值有3个标准差,这意味着~99.7%的值在0.3到2之间,你可以把它们除以2,使它们远离2个标准差,从而使95%的值在这个范围内。
发布于 2020-01-16 04:42:59
import numpy as np
h = [5, 6, 5, 6, 6, 6, 6, 6]
result = [i+random.choice([round(j, 2) for j in np.arange(0.3, 2.1, 0.1)]) for i in h]https://stackoverflow.com/questions/59762849
复制相似问题