Python 加权随机

稀有度随机

问题1. 有一堆数据 x = [1,5,7],随机取出一个数?

random.choice(x)

问题2. 如何按照权重20 , 20 , 60取出一个数?

我们可以把总和 100分成几个区间,0 - 19 分给 1, 20 - 39 分给 5, 40 - 99 分给7, 再随机0 - 99 看这个随机数落在哪个区间就可以了。

import random
import bisect

m = [20, 20, 60]
n = []
count = 0 

for i, v in enumerate(m):
    n.append(count)
    count += v

rd = random.randint(0, count -1)
r = bisect.bisect_right(n, rd)
result = x[r]

注意:m必须是排好顺序的,bisect二分查找binary search需要 bisect.bisect_right(n, rd) 插入的 rd 在 n 的位置。

其中 n 的值可以使用

from itertools import accumulate  
n = list(accumulate(data))

使用 Python 写算法的时候,注意多找找相关的第三方包,总有惊喜等着你。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本方法的原理是把所有权重的数值相加得到一个权重的总和,然后在 1 到总和之间随机选取一个整数。把权重由小到大按升序...
    SingleDiego阅读 2,614评论 0 0
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,779评论 0 11
  • 一、实验目的 学习使用 weka 中的常用分类器,完成数据分类任务。 二、实验内容 了解 weka 中 explo...
    yigoh阅读 8,638评论 5 4
  • 近段时间,看了些书,认识些人,渐渐的更加熟悉了王小波、路遥、巴金,认识了周国平、仓央嘉措、徐志摩等。而这些使我...
    lanabobana阅读 254评论 0 0
  • 执手青梅醉芳华, 俯耳嫣然忆犹佳。 而今坟前不再语, 笔下生花渡袈裟。 2016.12.28 Becky
    舞鎏殇阅读 100评论 0 0