给定分布函数的随机数生成器



我对编程完全陌生。我有密度函数,它有两个范围。如何根据这个函数得到随机函数。最后一次返回时间的概率密度函数为:

(1/sqrt(2*pi*std**2))*exp(-(x+24-µ2)**2/2*std**2)   ,   0 < x ≤ µ2 − 12
f(x) =
(1/sqrt(2*pi*std**2))*exp(-(x-µ2)**2/2*std**2) ,  µ2 − 12 < x ≤ 24

std=3.4,µ2=17.6

经过几个小时的寻找,我得到了答案1.获取从0到1的随机数2.计算cdf3.计算逆cdf4.获取随机数

但我不知道如何在python中实现这一点。

您可以使用scipy.stats.rv_continuous作为基类创建自己的发行版。该类具有CDF、随机数生成器、SF、ISF等的快速默认实现,给定分布的PDF。您可以使用以下内容实现自己的分发:

import numpy as np
from numpy import exp
from scipy.stats import rv_continuous
class my_distribution_gen(rv_continuous):
def _logpdf(self, x, mu, std):
# code the log of your pdf function here
result = # here goes your equation
return result
def _pdf(self, x, mu, std):
return exp(self._logpdf(x, mu, std))
my_distribution = my_distribution_gen(name='my_distribution')

一旦您准备好了上面的类,您就可以通过调用rvscdf等方法来享受默认实现。

mu, std = 0, 1
rvs = my_distribution.rvs(mu, std)

最新更新