如何使用概率分布更改列表中的值?

How can I change the value in list using probability distribution?

我有号码列表: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]

如果该范围内的每个值都应该具有相同的概率,那么您可以这样做:

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,边界(0.3 和 2)与平均值相差 3 个标准差,这意味着约 99.7% 的值将介于 0.3 和 2 之间。您可以除以2 而不是使它们相差 2 个标准偏差,这将使 ~95% 的值在该范围内。

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]