生成遵循概率分布的随机数

时间:2021-04-22 07:00:37

标签: python python-3.x random

我有一个函数描述的概率分布,假设是一个高斯分布(系数为 1/sqrt(pi),这使得以下区域为 1):

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

上一个函数将绘制下图 enter image description here

如果我使用那个高斯函数作为概率分布,那么我收到 0 的概率会比其他任何数字都大。

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

3 个答案:

答案 0 :(得分:1)

一种方法是使用 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)]

答案 1 :(得分:0)

内置 random 库中有一些常见的随机分布。

下面我按照高斯和对数正态生成了 1k 个随机数

robjs = RelationModel.objects.filter(source_key__in=lamp_keys, target_concept='aaa')

答案 2 :(得分:0)

考虑 scipy.stats 库。来自正态分布 https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html 的文档页面:

from scipy.stats import norm # Import library
r = norm.rvs(size=1000) # Draw 1000 random variates

还要注意,它是一个概率密度,所以绘制任何特定数字(包括0)的概率实际上是0。