我有一个函数描述的概率分布,假设是一个高斯分布(系数为 1/sqrt(pi)
,这使得以下区域为 1
):
import math
D = lambda x: pow(math.e, -pow(x,2)) / math.sqrt(math.pi)
上一个函数将绘制下图
如果我使用那个高斯函数作为概率分布,那么我收到 0
的概率会比其他任何数字都大。
有没有办法生成遵循该分布的随机数?
答案 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。