我是编程新手。我有两个范围的密度函数。我如何才能根据此函数获得随机函数。 最后一次返回时间的概率密度函数为:
(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.计算CDF 3.计算逆CDF 4.获取随机数
但是我不知道如何在python中实现它。
答案 0 :(得分:1)
您可以使用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')
一旦您准备好上述类,就可以通过调用rvs
,cdf
等方法来享受默认实现。
mu, std = 0, 1
rvs = my_distribution.rvs(mu, std)