【问题标题】:ValueError: Domain error in arguments scipy rv_continuousValueError:参数scipy rv_continuous中的域错误
【发布时间】:2016-09-10 15:05:03
【问题描述】:

我试图使用 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:\Users\ME\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 856, in rvs
    raise ValueError("Domain error in arguments.")

ValueError: Domain error in arguments.

似乎如果我将_c 设置为大于0.0 的某个数字,它可以正常工作,但对于小于0 的_c 则不行。

我对此有点困惑。任何帮助,将不胜感激。

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    来自the documentation

    子类化

    可以通过子类化 rv_continuous 来定义新的随机变量 类并至少重新定义 _pdf_cdf 方法(标准化 到位置 0 和比例 1)。

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

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

    查看默认实现in the source of _distn_infrastructure

    【讨论】:

    • 你知道为什么参数应该对 rvs 有利吗?例如,uniform.rvs()。我得到同样的错误,但我不明白逻辑。谢谢。
    猜你喜欢
    • 2021-02-13
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多