[SciPy-Dev] distributions.py expect

josef.pktd@gmai... josef.pktd@gmai...
Fri Sep 14 15:45:02 CDT 2012


On Fri, Sep 14, 2012 at 4:21 PM, nicky van foreest <vanforeest@gmail.com> wrote:
> Hi,
>
> I am trying to implement the expect method in rv_frozen. To understand
> the normal working of the expect method I tried the following:
>
> from scipy.stats import geom, norm, gamma
>
> print norm.expect(loc = 3,scale =5)
> print gamma.expect(None, 4.5)
> print gamma.expect(lambda x: x, 4.5)
> print geom.expect(lambda x: x, 1./3)

print geom.expect(lambda x: x, (1./3,))
args as tuple ?

I will look at it later.

The two versions should have a consistent signature.

Josef

>
> This is the result:
>
> 3.0
> 4.5
> 4.5
> Traceback (most recent call last):
>   File "expecttest.py", line 6, in <module>
>     print geom.expect(lambda x: x, 1./3)
>   File "/home/nicky/prog/scipy/scipy/stats/distributions.py", line
> 6375, in expect
>     self._argcheck(*args) # (re)generate scalar self.a and self.b
> TypeError: _argcheck() argument after * must be a sequence, not float
>
> So the first examples work, but the rv_discrete example doesn't. One
> thing is that the _argcheck is not called in rv_continuous while it is
> in rv_discrete. Removing this line results in another error:
>
> 3.0
> 4.5
> 4.5
> Traceback (most recent call last):
>   File "expecttest.py", line 6, in <module>
>     print geom.expect(lambda x: x, 1./3)
>   File "/home/nicky/prog/scipy/scipy/stats/distributions.py", line
> 6394, in expect
>     low, upp = self._ppf(0.001, *args), self._ppf(0.999, *args)
> TypeError: _ppf() argument after * must be a sequence, not float
>
> What would be actually the right way to call the expect method for
> rv_discrete? Or perhaps the other way around, should this method be
> changed so that my example with geom works?
>
> ----
>
> I extended rv_frozen with this method, and this appears to work well
> for continuous rvs, but also fails for discrete rvs.
>
>     def expect(self, *args, **kwds):
>         args += self.args
>         kwds.update(self.kwds)
>         return self.dist.expect(*args, **kwds)
>
> Nicky
> _______________________________________________
> SciPy-Dev mailing list
> SciPy-Dev@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-dev


More information about the SciPy-Dev mailing list