在 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
,可让您根据需要生成任意数量的随机数。
我想在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
,可让您根据需要生成任意数量的随机数。