首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rv_continuous在SciPy 0.8.0中的子类

rv_continuous在SciPy 0.8.0中的子类
EN

Stack Overflow用户
提问于 2017-04-28 12:03:32
回答 1查看 140关注 0票数 1

我想使用“双高斯”(即两个正态分布的归一化和)对某些数据进行拟合。使用SciPy 0.18.1,以下代码工作:

代码语言:javascript
复制
import numpy as np
from scipy.stats import rv_continuous

class DoubleGauss(rv_continuous):
    """Double Gaussian distribution"""

    def _pdf(self, x, mu1, sigma1, mu2, sigma2, w):
        g1 = np.exp(-0.5*((x-mu1)/sigma1)**2) / np.sqrt(2.0*np.pi*sigma1**2)
        g2 = np.exp(-0.5*((x-mu2)/sigma2)**2) / np.sqrt(2.0*np.pi*sigma2**2)
        return w * g1 + (1.0-w) * g2

dg = DoubleGauss(name='DG')
print dg.rvs(mu1=0.001, sigma1=2.0, mu2=0.05, sigma2=4.0, w=0.8)

(这当然是一个极小的例子。最后,我还将重新定义用于速度的_cdf和_argcheck,以允许mu参数的非零值。)

因为我需要读取数据才能使用其他库来安装,所以我必须在一个只有SciPy 0.8.0可用的环境中运行代码。但是,运行相同的代码会导致以下错误:

代码语言:javascript
复制
  File "test.py", line 13, in <module>
    print dg.rvs(mu1=0.01, sigma1=2.0, mu2=0.05, sigma2=4.0, w=0.8)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 523, in rvs
    vals = self._rvs(*args)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 848, in _rvs
    Y = self._ppf(U,*args)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 861, in _ppf
    return self.vecfunc(q,*args)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-numpy/1.6.1-cms/lib/python2.7/site-packages/numpy/lib/function_base.py", line 1862, in __call__
    theout = self.thefunc(*newargs)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 817, in _ppf_single_call
    return optimize.brentq(self._ppf_to_solve, self.xa, self.xb, args=(q,)+args, xtol=self.xtol)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/optimize/zeros.py", line 362, in brentq
    r = _zeros._brentq(f,a,b,xtol,maxiter,args,full_output,disp)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 814, in _ppf_to_solve
    return apply(self.cdf, (x, )+args)-q
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 952, in cdf
    place(output,cond,self._cdf(*goodargs))
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 855, in _cdf
    return self.veccdf(x,*args)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-numpy/1.6.1-cms/lib/python2.7/site-packages/numpy/lib/function_base.py", line 1862, in __call__
    theout = self.thefunc(*newargs)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/stats/distributions.py", line 852, in _cdf_single_call
    return scipy.integrate.quad(self._pdf, self.a, x, args=args)[0]
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 247, in quad
    retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)
  File "/cvmfs/cms.cern.ch/slc6_amd64_gcc491/external/py2-scipy/0.8.0-cms/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 313, in _quad
    return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
TypeError: _pdf() takes exactly 7 arguments (2 given)

在文档中,我发现对如何使用rv_continuous的描述没有任何不同。如何修正代码,使其与SciPy 0.8.0一起工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-28 13:05:04

在0.13之前,pdf等人不接受关键字参数。尝试将它们作为位置args,而不是关键字(命名)参数。

自0.8版以来,还出现了其他几个改进。我认为您需要在构造函数中指定形状,而且ppf中还有callef和xb --您可能需要检查https://github.com/scipy/scipy/blob/v0.8.0/scipy/stats/distributions.py的源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43679791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档