博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按概率随机选取
阅读量:6165 次
发布时间:2019-06-21

本文共 971 字,大约阅读时间需要 3 分钟。

上一篇笔记的pygame游戏对敌人和白云的移动速度使用了随机函数randint(),游戏体验不是太好。如果是按概率随机选取设置速度的话,游戏体验会好一些。

据我了解,random.choice(seq)是等概率选取一个,不是我想要的。而 numpy.random.choice(seq, p, k)是按概率随机重复选取多个,这正是我想要的。

但是,我不想为这么一个函数引入巨大的numpy库,所以打算自己实现一个按概率随机选取的函数。

特此将代码记录如下:

# 作者:hhh5460# 时间:2017年6月17日import random# 根据概率随机选取def random_choice(seq, prob, k=1):    '''    功能:        按给定概率prob,从seq中选取元素。可重复k次    注意        1. seq, prob长度要相等        2. prob的概率和要等于1        3. k 表示重复选取的次数,默认为1次        4. 结果返回list        5. 用到了random模块的random()函数    例子:        >>> random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35])        ['d']        >>> random_choice('abcd', [0.4, 0.15, 0.1, 0.35], k=5)        ['d','d','b','a','d']    '''    res = []    for j in range(k):        p = random.random()        for i in range(len(seq)):            if sum(prob[:i]) < p <= sum(prob[:i+1]):                res.append(seq[i])    return res    # 测试def test():    print(random_choice(['a','b','c','d'], [0.4, 0.15, 0.1, 0.35], k=5))test()

转载地址:http://lpyba.baihongyu.com/

你可能感兴趣的文章
条款07:为多态基类声明virtual析构函数
查看>>
重置cisco路由器密码
查看>>
java学习之java基本概念-标识符的命名规则及访问控制
查看>>
华为交换机、路由器常用命令
查看>>
静态方法
查看>>
golang中strings包用法
查看>>
libgdx游戏引擎教程
查看>>
MongoDB学习笔记(五) MongoDB文件存取操作
查看>>
[转]DPM2012系列之五:开启最终用户恢复功能
查看>>
Auto Layout on iOS Versions prior to 6.0 解决办法
查看>>
牛人个人网站汇集
查看>>
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)...
查看>>
[转载] Knowledge Management and Engineering——04 生产计划专家系统和国家赔偿法律专家系统...
查看>>
运维工单--服务器申请工单
查看>>
我的友情链接
查看>>
排序 交换排序
查看>>
业界最有价值的Linux资料大全(200篇)
查看>>
我的友情链接
查看>>
QtCreator插件开发(三)——QtCreator架构
查看>>
Spring学习总结(2)——Spring的常用注解
查看>>