没有合适的资源?快使用搜索试试~ 我知道了~
python的random模块及加权随机算法的python实现方法
8 下载量 29 浏览量
2020-12-24
22:33:10
上传
评论
收藏 61KB PDF 举报
温馨提示
试读
2页
random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串。 •random.seed(x)改变随机数生成器的种子seed。 一般不必特别去设定seed,Python会自动选择seed。 •random.random() 用于生成一个随机浮点数n,0 <= n < 1 u7528于生成一个指定范围内的随机浮点数,生成的随机整数a<=n u7528于生成一个指定范围内的整数,a为下限,b为上限,生成的随机整数a<=n b;若a=b,则n>b,报错 •random.randran
资源推荐
资源详情
资源评论
python的的random模块及加权随机算法的模块及加权随机算法的python实现方法实现方法
random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串。
•random.seed(x)改变随机数生成器的种子改变随机数生成器的种子seed。。
一般不必特别去设定seed,Python会自动选择seed。
•random.random() 用于生成一个随机浮点数n,0 <= n < 1
•random.uniform(a,b) 用于生成一个指定范围内的随机浮点数,生成的随机整数a<=n<=b;
•random.randint(a,b) 用于生成一个指定范围内的整数,a为下限,b为上限,生成的随机整数a<=n<=b;若a=b,则n=a;若
a>b,报错
•random.randrange([start], stop [,step]) 从指定范围[start,stop)内,按指定基数递增的集合中获取一个随机数,基数缺省值为
1
•random.choice(sequence) 从序列中获取一个随机元素,参数sequence表示一个有序类型,并不是一种特定类型,泛指
list,tuple,字符串等
•random.shuffle(x[,random]) 用于将一个列表中的元素打乱 (洗牌),会改变原始列表
•random.sample(sequence,k) 从指定序列中随机获取k个元素作为一个片段返回,不会改变原有序列
那么现在基础知识有了,我们来实现一个加权随机算法:
加权随机算法一般应用在以下场景:有一个集合S,里面比如有A,B,C,D这四项。这时我们想随机从中抽取一项,但是抽取的
概率不同,比如我们希望抽到A的概率是50%,抽到B和C的概率是20%,D的概率是10%。一般来说,我们可以给各项附一个权
重,抽取的概率正比于这个权重。那么上述集合就成了:
{A:5,B:2,C:2,D:1}
方法一:方法一:
最简单的方法可以这样:
把序列按权重值扩展成:lists=[A,A,A,A,A,B,B,C,C,D],然后random.choice(lists)随机选一个就行。虽然这样选取的时间复杂度是
O(1),但是数据量一大,空间消耗就太大了。
# coding:utf-8
import random
def weight_choice(list, weight):
"""
:param list: 待选取序列
:param weight: list对应的权重序列
:return:选取的值
"""
new_list = [] for i, val in enumerate(list):
new_list.extend(val * weight[i])
return random.choice(new_list)
if __name__ == "__main__":
print(weight_choice(['A', 'B', 'C', 'D'], [5, 2, 2, 1]))
方法二:方法二:
比较常用的方法是这样:
计算权重总和sum,然后在1到sum之间随机选择一个数R,之后遍历整个集合,统计遍历的项的权重之和,如果大于等于R,
就停止遍历,选择遇到的项。
还是以上面的集合为例,sum等于10,如果随机到1-5,则会在遍历第一个数字的时候就退出遍历。符合所选取的概率。
选取的时候要遍历集合,它的时间复杂度是O(n)。
# coding:utf-8
import random
资源评论
weixin_38656364
- 粉丝: 7
- 资源: 898
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 二叉树7-1-1.cpp
- android 9.0 原生模拟器 签名文件
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功