【发布时间】:2021-03-28 03:35:39
【问题描述】:
In the documentation page of rv_continuous 我们可以找到一个“自定义”高斯被子类化如下。
from scipy.stats import rv_continuous
import numpy as np
class gaussian_gen(rv_continuous):
"Gaussian distribution"
def _pdf(self, x):
return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi)
gaussian = gaussian_gen(name='gaussian')
反过来,我尝试为以 2 为底的指数分布创建一个类,以模拟一些核衰变:
class time_dist(rv_continuous):
def _pdf(self, x):
return 2**(-x)
random_var = time_dist(name = 'decay')
这样做的目的是调用random_var.rvs(),以便根据我定义的pdf生成随机分布的值样本。但是,当我运行它时,我收到一个 OverflowError,我不太明白为什么。最初我认为这与函数未标准化这一事实有关。但是,我一直对 _pdf 定义进行更改,但无济于事。代码有什么问题,还是这种方法不适合定义此类函数?
【问题讨论】:
-
您查看过numpy's exponential 和scipy.stats.expon 吗?你需要
scale=1/np.log(2)
标签: python-3.x scipy scipy.stats