首页 > 解决方案 > 在python中实现特定的分布

问题描述

我想1<l<10有概率回来1/(2^(l-1))

我应该如何做到这一点,而不是:

    x = random()
    if x < 0.5:
       return 2

等等

谢谢你

标签: pythonrandomprobability

解决方案


这会很有趣......我对这些东西有点生疏,所以一个好的数学家可以修正我的推理。

要从公式生成分布,您首先需要进行一些积分并计算指定区间的累积密度函数。特别是我们需要开始计算归一化常数。 计算归一化常数

对于“k”,这个积分给出:

k值

累积密度函数的“意义”是“获得属于我需要的区间的某个数字的概率是多少?”。这个问题可以换个角度看:“取小于或等于 10 的数的概率一定是 1”。这导致以下方程有助于找到参数“C”。请注意,第一个 therm 是 k,第二个 therm 是 2^(1-x) 的一般积分,其中我将 x 替换为 10。 几乎完整的 CDF

解决了这个问题,我们终于到达了 CDF(同样,找到它的方法可能更容易):

最终 CDF

此时我们需要反转 X 的 CDF。X 现在是我们在 0 和 1 之间的随机数生成器。公式为: 随问定律分布的随机值

在 python 代码中,我尝试了以下操作:

import numpy as np
import matplotlib.pyplot as plt

a=[ 1-   np.log2(1-(1-2**(-9))*np.random.rand()) for i in range(10000)]

plt.hist(a, normed=True)

在此处输入图像描述

这有意义吗?


推荐阅读