python - 为什么在传递递减值列表 "random.choices"时 "cum_weights"总是返回相同的元素?

标签 python random

我不明白 random.choicescum_weights 参数。

我读到它是:

前一个元素的权重+自身权重 [10, 5, 1] → [10, 15, 16]

据我了解,“cherry”的概率是16,是最高的。那么为什么“apple”结果会更加重复呢?

import random

mylist = ["apple", "banana", "cherry"]
print(random.choices(mylist, cum_weights=[10, 5, 1], k=9))

输出:

['apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple']

最佳答案

当您有相对权重时,累积权重看起来就像这些值的总和:

您的 cum_weights 应为:[10, 15, 16]

mylist = ["apple", "banana", "cherry"]
print(random.choices(mylist, cum_weights=[10, 15, 16], k=14))
['apple', 'banana', 'cherry', 'banana', 'apple', 'banana', 'apple', 'apple', 'banana', 'banana', 'apple', 'banana', 'banana', 'banana']

关于python - 为什么在传递递减值列表 "random.choices"时 "cum_weights"总是返回相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68475710/

相关文章:

java - 生成随机数的更好方法

python - Ruby 类 Net :HTTP? 的 Python 等价物是什么

python - optparse() : Input validation

python、多处理和 dmtcp : checkpointing one process in Pool?

jquery - 使用 Jquery 将随机着色变量添加到样式文本链接

c++ - 改变 uniform_int_distribution 的范围

python - 多处理 : optimize CPU usage for concurrent HTTP async requests

python - Sagemaker 在训练期间不将 Tensorboard 日志输出到 S3

arrays - 生成具有特定比例的随机二进制序列

python - 如何从具有不同参数的方法列表中随机选择方法?