python按概率⽣成随机数1
之前有个类似的帖⼦:
各位可以先看下,不过我没看懂他这么写的⽬的,好像是统计10000次⽣成红绿蓝⾊的情况分别是多少次,代码运⾏没什么问题,就是有时候会产⽣随机结果没有选中红绿蓝,这⼀点可以在最后结果加起来不等于10000看出来。不知道他要的就是这个效果还是有误。于是我修改了下,下⾯是我修改后的代码,保证了每次循环都能选中红绿蓝中的⼀个。
# coding: utf-8
import random
import time
def random_index(rate):
"""随机变量的概率函数"""
# 参数rate为list<int>
# 返回概率事件的下标索引
start =0
index =0
randnum = random.randint(1,sum(rate))
for index, scope in enumerate(rate):
start += scope
if randnum <= start:
break
return index
def main():
arr =['red','green','blue']
rate =[45,30,25]
red_times =0
green_times =0
blue_times =0
for i in range(10000):
index = random_index(rate)
if index ==0:
red_times +=1
elif index ==1:
green_times +=1
elif index ==2:
blue_times +=1
dict={arr[0]: red_times, arr[1]: green_times, arr[2]: blue_times}
print(dict)
# print(red_times, green_times, blue_times)
start = time.perf_counter()
main()
end = time.perf_counter()
print(end - start)
打印结果:
{'red':4493,'green':2922,'blue':2585}
python生成1到100之间随机数0.026857719000000002
我也测了下之前他代码运⾏时间:
451330552447
0.068724921
可以看出来这个还是⽐较耗时间的
当然,按概率⽣成随机数还有更好的⽅法,希望⼤⽜不吝赐教。谢谢

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。