在Python中选择概率为随机数的随机数

在Python中选择概率为随机数的随机数,python,numpy,probability,Python,Numpy,Probability,虽然我可以找到关于如何根据挑选每个号码的概率生成号码的适当信息,例如: 它以概率p=0.1选择0,以概率p=0选择1,以概率p=0选择2,以概率p=0.3选择3,以概率p=0.6选择3,以概率p=0选择4 我想知道的是,有什么函数会改变概率?例如,一次我可能有上面的概率分布,下一次可能是p=[0.25,1,0.18,0.2,27])。所以我想动态地生成概率分布。有没有一个python库可以做到这一点 我想做的是生成数组,每个数组的长度都是n,带有一些概率分布中的数字,如上面所述。好吧,没有内置的

虽然我可以找到关于如何根据挑选每个号码的概率生成号码的适当信息,例如:

它以概率p=0.1选择0,以概率p=0选择1,以概率p=0选择2,以概率p=0.3选择3,以概率p=0.6选择3,以概率p=0选择4

我想知道的是,有什么函数会改变概率?例如,一次我可能有上面的概率分布,下一次可能是p=[0.25,1,0.18,0.2,27])。所以我想动态地生成概率分布。有没有一个python库可以做到这一点


我想做的是生成数组,每个数组的长度都是n,带有一些概率分布中的数字,如上面所述。

好吧,没有内置的方法可以做到这一点。你可以做轮盘赌轮选择,这应该达到你想要的

基本思想很简单:

def roulette(weights):
    total = sum(weights)
    mark = random.random() * total
    runner = 0
    for index, val in enumerate(weights):
        runner += val
        if runner >= mark:
            return index

你可以在

上阅读更多内容,一个很好的选择是狄里克莱分布:此分布的样本位于一个
K
维单纯形或一个多项式分布中

当然,有一个方便的numpy函数,可以生成任意数量的随机分布:

# 10 length-4 probability distributions:
np.random.dirichlet((1,1,1,3),size = 10)
这些将被输入到
np.random.choice
调用中的
p=
参数中

有关元组参数如何影响采样的多项式分布的更多信息,请查阅

# 10 length-4 probability distributions:
np.random.dirichlet((1,1,1,3),size = 10)