Python 具有自定义概率分布的随机指数
我有一个概率向量(当然是和1): 现在我需要为这个向量生成一个随机索引(包括一个介于0和3之间的数字),但是我希望每个索引的概率由prob给出Python 具有自定义概率分布的随机指数,python,numpy,random,distribution,Python,Numpy,Random,Distribution,我有一个概率向量(当然是和1): 现在我需要为这个向量生成一个随机索引(包括一个介于0和3之间的数字),但是我希望每个索引的概率由prob给出 0 will be generated with prob 0.1 1 will be generated with prob 0.3 2 will be generated with prob 0.4 3 will be generated with prob 0.2 我知道我可以通过计算总和来做到这一点 cumsum = [0.1, 0.4, 0.
0 will be generated with prob 0.1
1 will be generated with prob 0.3
2 will be generated with prob 0.4
3 will be generated with prob 0.2
我知道我可以通过计算总和来做到这一点
cumsum = [0.1, 0.4, 0.8, 1.0]
然后生成一个介于0和1之间的随机数:
rand_num = np.random.random()
最后使用np.digitalize
检查我的随机数落在哪个箱子里
idx = np.digitize([rand_num], cumsum)
这是可行的,我对此很满意,Digitalize甚至接受一个数字列表并将它们分类到箱子中,这样我就可以创建自己的函数来生成给定概率分布的索引
我的问题是:这是一个常见的问题,难道不存在这样一个函数吗?(这将比我自己做更有效率)
谢谢您可以使用Python 3.6中的
随机选项
,其中包括一个权重
参数:
>>> from random import choices
>>> prob = [0.1, 0.3, 0.4, 0.2]
>>> choices(range(len(prob)), weights=prob)
[2]
>>> choices(range(len(prob)), weights=prob)
[3]
>>> choices(range(len(prob)), weights=prob, k=4)
[1, 2, 2, 2]
prob.find(rand_num)
?
>>> from random import choices
>>> prob = [0.1, 0.3, 0.4, 0.2]
>>> choices(range(len(prob)), weights=prob)
[2]
>>> choices(range(len(prob)), weights=prob)
[3]
>>> choices(range(len(prob)), weights=prob, k=4)
[1, 2, 2, 2]