ValueError:参数scipy rv_continuous中的域错误



我试图用scipy.stats.rv_continuous:

对给定概率密度函数(pdf)下的随机变量进行抽样。
class Distribution(stats.rv_continuous):
    def _pdf(self,x, _a, _c):
        return first_hitting_time(x, _a, _c)

函数first_hitting_time

#pdf of first hitting time of W_t + c*t on a. 
def first_hitting_time(_t, _a, _c=0.0):
    return _a/_t*np.exp(-0.5/_t*(_a-_c*_t)**2)/np.sqrt(2.0*np.pi*_t)

然后继续

myrv= Distribution(name='hittingtime', a=0.002,b=30.0)
data3= myrv.rvs(size=10000, _a=1.0, _c=0.0)

和解释器开始报错-

Traceback (most recent call last):
  File "<ipython-input-246-71f67047462b>", line 1, in <module>
    data3= myrv.rvs(size=10000, _a=1.0, _c=0.0)
  File "C:UsersMEAppDataLocalContinuumAnaconda2libsite-packagesscipystats_distn_infrastructure.py", line 856, in rvs
    raise ValueError("Domain error in arguments.")
ValueError: Domain error in arguments.

似乎如果我将_c设置为大于0.0的某个数字,它工作得很好,但不适合_c小于0。

我对此有点困惑。任何帮助都会很感激。

来自文档:

子类化

新的随机变量可以通过继承rv_continuous来定义类并至少重新定义_pdf_cdf方法(归一化)

如果正参数检查不正确为您的RV,那么您将还需要重新定义_argcheck方法。

从你的函数我不清楚_a_c代表什么,但看起来你想让它们是负的。

参见_distn_infrastructure源代码中的默认实现

最新更新