如何实现有偏差的随机函数?

时间:2013-12-01 10:36:01

标签: python

我的问题是random.choice功能。我们知道,当我们运行random.choice(['apple','banana'])时,它将返回具有相同概率的'apple''banana',如果我想返回偏差结果,例如,重新生成'apple'该怎么办? 0.9概率和'banana'概率为0.1?如何实现这个?

3 个答案:

答案 0 :(得分:3)

一种基本的方法是获得0到1之间的兰特数并进行一些测试:

randNumber = random.random()
if randNumber < 0.9:
     fruit = "apple"
else:
     fruit = "banana"

可以简化为:['apple', 'banana'][random.random()>0.9](感谢@falsetru评论)

答案 1 :(得分:1)

重点是创建一个包含更多或更少特定元素的新列表 你不想偏见

应该这样做:

import random

a = ['apple','banana']
probability = [0.1,0.9]

def biase(lst,probability):
    zipped = zip(lst,probability)
    lst = [[i[0]] * int(i[1]*100) for i in zipped]
    new = [b for i in lst for b in i]
    return new

biased_list = biase(a,probability)
random_word = random.choice(biased_list)
print random_word

此代码在大多数情况下会产生banana,因为字符串banana重复90%而不是apple

我添加了一个名为概率的列表,我已经压缩了(订购了python列表)它,但字典更适合这类任务


如果你进入引擎盖并打印biased_list,你会看到类似的东西:

['apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana']

答案 2 :(得分:0)

幸运的是,在Python 3中,您只需使用

即可
import random
random.choices(a, probability)
#random.choices(population, weights=None, *, cum_weights=None, k=1)