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

Choosing random number where probability is random in Python

虽然我可以找到有关如何根据使用 numpy.random.choice 选择每个数字的概率生成数字的不错信息,例如:

np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])

选择 0 的概率为 p =.1,1 的概率为 p = 0,2 的概率为 p = .3,3 的概率为 p = .6,4 的概率为 p = 0。

我想知道的是,有什么函数可以改变概率?因此,例如,有一次我可能有上面的概率分布,下一次可能有 p=[0.25, .1, 0.18, 0.2, .27])。所以我想即时生成概率分布。是否有 python 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

您可以在 https://en.wikipedia.org/wiki/Fitness_proportionate_selection

阅读更多内容

一个不错的选择是 Dirichlet 分布:来自该分布的样本位于 K 维单纯形,也就是 多项式分布.

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

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

这些将被馈送到您的 np.random.choice 调用中的 p= 参数。

您可以参考 Wikipedia 了解有关元组参数如何影响采样多项式分布的更多信息。