在 python 中生成随机数,这样生成一个数字的可能性与它的值成反比

Generate random number in python, such that the likelihood of a number being generated is inversely proportionate to it's value

我想在python中生成一个从1到n的伪随机数,但是数字越大生成的可能性应该越小. 所以, 1 将是这个随机函数最有可能的结果 2 的可能性是 1 的一半 3 的可能性是 1 的三分之一 4 的可能性是 1 的四分之一 ... k 将是 1/k 和 1.

一样的可能性

所以如果有 1/10 的机会结果是 1,那么 2 的机会就是 1/20,3: 1/30, k: 1/10 k.

我不想列出一个列表并选择一个随机值或任何此类不准确的 hack,所以不要建议。

Scipy 包可以生成随机倒数,如 here

所述

在此示例中,我们从 N = 1 - 10 范围内创建一个随机值:

from scipy.stats import reciprocal
>>> r = reciprocal.rvs(1, 10, size=1)
>> r
array([ 3.83178852])

返回值是 size 个元素的数组。

你会接受准确的破解吗?

random.choices(range(1,n+1),[1/k for k in range(1,n+1)])

有效。此外,它还有一个可选参数 k,可让您根据需要生成任意数量的随机数。