首页 > 解决方案 > 生成遵循概率分布的随机数

问题描述

我有一个从函数描述的概率分布,比方说一个高斯分布(带有系数1/sqrt(pi),这使得以下区域1):

import math
D = lambda x: pow(math.e, -pow(x,2)) / math.sqrt(math.pi)

上一个函数将绘制下图 在此处输入图像描述

如果我使用该高斯函数作为概率分布,我0将比任何其他数字更有可能收到回击。

有没有办法生成一个遵循该分布的随机数?

标签: pythonpython-3.xrandom

解决方案


一种方法是使用 scipy.stats。

我们从 rv_continuous 继承并指定概率密度函数_pdf。接下来,我们使用继承的方法rvs()来抽取一个随机样本。

import math
from scipy.stats import rv_continuous


class MyRandomVariable(rv_continuous):
    def _pdf(self, x):
        return pow(math.e, -pow(x,2)) / math.sqrt(math.pi)
    
    
my_random_variable = MyRandomVariable()

samples = [my_random_variable.rvs() for i in range(10)]

推荐阅读