Hoo*_*man 4 python random probability-density
我想生成一个整数随机数,其概率分布函数作为列表给出。例如,如果 pdf=[3,2,1] 那么我喜欢 rndWDist(pdf) 返回 0,1 和 2,概率为 3/6、2/6 和 1/6。我为此编写了自己的函数,因为我在 random 模块中找不到它。
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
Run Code Online (Sandbox Code Playgroud)
有没有更短的方法来达到相同的结果?
小智 6
这是一个重复的问题:Generate random numbers with a given (numerical) distribution
正如那里的第一个答案所建议的那样,您可能想要使用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)
Run Code Online (Sandbox Code Playgroud)
这将返回一个包含 10 个随机值的 numpy 数组。