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

时间:2020-10-24 07:07:18

标签: python numpy scipy statistics

我是编程新手。我有两个范围的密度函数。我如何才能根据此函数获得随机函数。 最后一次返回时间的概率密度函数为:

      (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中实现它。

1 个答案:

答案 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')

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

mu, std = 0, 1
rvs = my_distribution.rvs(mu, std)
相关问题