生成随机数求和到预定义值
在这种情况下,我们的目标是生成一个伪随机数列表,这些伪随机数共同添加直至特定的预定值。一种方法是随机生成指定范围内的数字,将其从总数中减去,然后重复此过程,直到总和等于所需值。然而,这种方法在对总和的贡献方面有利于第一个生成的数字。
为了确保一致性,开发了更复杂的解决方案:
import random
def constrained_sum_sample_pos(n, total):
"""Return a randomly chosen list of n positive integers summing to total.
Each such list is equally likely to occur."""
dividers = sorted(random.sample(range(1, total), n - 1))
return [a - b for a, b in zip(dividers [total], [0] dividers)]
此方法生成总和为目标值的正整数列表。关键概念是每种可能的数字组合都有相同的可能性生成。此外,将此技术扩展到不同的总计和不同数量的随机数非常简单。
例如,如果我们将 n 设置为 4,总计设置为 40,我们可能会获得以下输出:[4, 4, 25 ,7]。需要注意的是,此列表中的每个元素相加后都会生成预定义值 40。
为了允许非正整数,可以进行修改:
def constrained_sum_sample_nonneg(n, total):
"""Return a randomly chosen list of n nonnegative integers summing to total.
Each such list is equally likely to occur."""
return [x - 1 for x in constrained_sum_sample_pos(n, total n)]
通过将每个值加一,我们可以生成一个非负整数列表,这些整数加起来等于所需的总数。
此方法确保每种可能的组合,无论数字是正数还是非负数,都有相同的生成概率。凭借其用户友好的实现和跨不同场景的多功能性,constrained_sum_sample_pos 和 constrained_sum_sample_nonneg 已成为 Python 中随机数生成任务不可或缺的一部分。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3