Python 加权随机

本方法的原理是把所有权重的数值相加得到一个权重的总和,然后在 1 到总和之间随机选取一个整数。把权重由小到大按升序排列,依此把权重相加,直到大于或等于选取的随机数为止,此时记相机次数为n,列表的第 n-1 项即为输出的加权随即项。

# 选项
list = ['A', 'B', 'C']

# 权重,升序排列
weighted = [1, 2, 4]

def weighted_random(list, weighted):
    # 从1到权重之和间随机抽取一个整数
    r = random.randint(1, sum(weighted)) 

    # 把权重依此相加,直到大于或等于随机数r,相加的次数记为n,跳出循环
    # 从选项列表中取 n-1 位作为输出的加权随机数
    c = 0
    for index, w in enumerate(weighted):
        c = c + w
        if c >= r:
            return (list[index])
            break

可以用以下代码验证下本方法:

all = []
for i in range(700):
    all.append(weighted_random(list, weighted))
print('A:', all.count("A"))
print('B:', all.count("B"))
print('C:', all.count("C"))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容