我想使用列表给出的概率分布函数生成一个整数随机数。例如,如果pdf = [3,2,1],那么我喜欢rndWDist(pdf)返回0,1和2,概率分别为3 / 6、2 / 6和1/6。我为此编写了自己的函数,因为在随机模块中找不到它。
def randintWDist(pdf):
cdf=[]
for x in pdf:
if cdf:
cdf.append(cdf[-1]+x)
else:
cdf.append(x)
a=random.randint(1,cdf[-1])
i=0
while cdf[i]<a:
i=i+1
return i
有没有更短的方法可以达到相同的结果?
这是一个重复的问题:生成具有给定(数字)分布的随机数
作为第一个答案,建议您使用scipy.stats.rv_discrete
。
您可能会这样使用它:
from scipy.stats import rv_discrete
numbers = (1,2,3)
distribution = (1./6, 2./6, 3./6)
random_variable = rv_discrete(values=(numbers,distribution))
random_variable.rvs(size=10)
这将返回一个具有10个随机值的numpy数组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句