正实数上的负二项式

from scipy.stats import rv_continuous
import numpy

class Neg_exp(rv_continuous): 
    def _cdf(self, x, lamda):
        return 1-numpy.exp(-lamda*x)
   
neg_exp = Neg_exp(name="Negative exponential", a=0)

print (neg_exp.pdf(0,.5))
print (neg_exp.pdf(5,.5))
print (neg_exp.cdf(5,.5))
print (neg_exp.stats(0.5))
print (neg_exp.rvs(0.5))

定义_pdf 或_cdf 至关重要,因为 scipy 会根据你的定义推断其他函数(你未定义)的参数,以及你所做的任何函数调用中这些参数的顺序。在这种情况下,只有一个分布参数 lambda。表示随机变量值的变量首先出现在_pdf 或_cdf 的定义中。

当你定义其中一个函数时,scipy 将以数字方式计算另一个函数。为了提高效率,请同时定义两者。同样,根据已知参数定义_stats 以获得最佳效率; 否则 scipy 使用数值方法。

请注意,在实例化类时定义了分布的支持(变量 a 设置为零,默认情况下 b 设置为无穷大),而不是在子类化时。另请注意,仅在调用其中一个类实例时才设置分布的参数,如最后五行代码中所示。