[Python]基于权重的随机数2种实现方式
来源:互联网 发布:摄像头改网络编码器 编辑:程序博客网 时间:2024/06/18 15:10
问题:
例如我们要选从不同省份选取一个号码,每个省份的权重不一样,直接选随机数肯定是不行的了,就需要一个模型来解决这个问题。
简化成下面的问题:
字典的key代表是省份,value代表的是权重,我们现在需要一个函数,每次基于权重选择一个省份出来
{"A":2, "B":2, "C":4, "D":10, "E": 20}
解决:
这是能想到和能看到的最多的版本,不知道还没有更高效好用的算法。
#!/usr/bin/env python# -*- coding: utf-8 -*-#python2.7x#random_weight.py #author: orangleliu@gmail.com 2014-10-11'''每个元素都有权重,然后根据权重随机取值输入 {"A":2, "B":2, "C":4, "D":10, "E": 20}输出一个值'''import randomimport collections as colldata = {"A":2, "B":2, "C":4, "D":6, "E": 11}#第一种 根据元素权重值 "A"*2 ..等,把每个元素取权重个元素放到一个数组中,然后最数组下标取随机数得到权重def list_method(): all_data = [] for v, w in data.items(): temp = [] for i in range(w): temp.append(v) all_data.extend(temp) n = random.randint(0,len(all_data)-1) return all_data[n] #第二种 也是要计算出权重总和,取出一个随机数,遍历所有元素,把权重相加sum,当sum大于等于随机数字的时候停止,取出当前的元组def iter_method(): total = sum(data.values()) rad = random.randint(1,total) cur_total = 0 res = "" for k, v in data.items(): cur_total += v if rad<= cur_total: res = k break return res def test(method): dict_num = coll.defaultdict(int) for i in range(100): dict_num[eval(method)] += 1 for i,j in dict_num.items(): print i, j if __name__ == "__main__": test("list_method()") print "-"*50 test("iter_method()")
一次执行的结果
A 4C 14B 7E 44D 31--------------------------------------------------A 8C 16B 6E 43D 27
思路:
思路都很原始可以参考下面的连接,还有别的好方法一起交流!!
代码: https://gist.github.com/orangle/d83bec8984d0b4293710
参考:
http://jzkangta.iteye.com/blog/1326302
http://blog.csdn.net/ajian005/article/details/19301689
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/39997489
1 0
- [Python]基于权重的随机数2种实现方式
- 基于权重的随机数JS实现
- 关于随机数权重的实现
- 基于Java的轮盘赌随机数(或者说权重随机数)的实现
- python实现-明明的随机数
- java产生随机数的2种方式
- Java带权重的随机数(未测试)
- 权重随机的实现
- 增加网站权重的方式
- Nginx upstream的5种权重分配方式
- Nginx upstream的5种权重分配方式
- Nginx upstream的5种权重分配方式分享
- Nginx upstream的5种权重分配方式分享
- Nginx upstream的5种权重分配方式(转)
- 生成带权重随机数
- 随机数 权重 概率
- java 权重随机数算法
- 集成学习自动权重设置python实现
- netlink多播
- Linux——等待队列
- mysq 之 dense_rank() over()
- 图表控件Edraw Max免费下载地址
- 20多个国家的创意狂欢 分享成功设计 -2014成功设计大赛颁奖典礼在沪圆满举行
- [Python]基于权重的随机数2种实现方式
- 虚拟机共享外存储设备,floppy disk driver
- mac 无法连接android手机进行调试 解决方案
- @ModelAttribute使用详解
- web图形样式基础1
- 获取datagrid的自身相关的属性方式
- Form Reset Function
- APP切图那点事儿–详细介绍android和ios平台
- C++ Primer 第五版 中文版 练习 13.39 个人code