生成与预定义值求和的随机数
在这种情况下,我们的目标是生成一个伪随机数列表,这些伪随机数共同添加直至特定的预定值。一种方法是随机生成指定范围内的数字,将其从总数中减去,然后重复此过程,直到总和等于所需值。然而,这种方法在对总和的贡献方面有利于第一个生成的数字。
为了确保一致性,我们开发了一个更复杂的解决方案:
<code class="python">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)]</code>
此方法生成一个列表总和为目标值的正整数。关键概念是每种可能的数字组合都有相同的可能性生成。此外,将此技术扩展到不同的总计和不同数量的随机数非常简单。
例如,如果我们将 n 设置为 4,总计设置为 40,我们可能会获得以下输出:[4, 4, 25 ,7]。需要注意的是,此列表中的每个元素相加后都会生成预定义值 40。
为了允许非正整数,可以进行修改:
<code class="python">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)]</code>
通过将每个值加一,我们可以生成一个非负整数列表,加起来等于所需的总数。
此方法确保每种可能的组合,无论数字是正数还是非负数,产生的概率相等。凭借其用户友好的实现和跨不同场景的多功能性,constrained_sum_sample_pos 和 constrained_sum_sample_nonneg 已成为 Python 中随机数生成任务不可或缺的一部分。
以上是如何生成等概率地求和到预定义值的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!