如何使用Scipy在Python中计算泊松分布随机变量的期望值?

时间:2014-07-30 10:02:58

标签: python numpy scipy

我想用Scipy计算泊松分布随机变量函数的期望值。

import scipy.stats as stats
from scipy.stats import poisson, norm

G = poisson(mu=30)
G.dist.expect(func=lambda x:(x+1), lb=0, ub=np.inf, *G.args, **G.kwds)    

这会导致错误:

  

文件" ipython-input-3-da8a2a80eba8",第2行,在模块中   G.dist.expect(func = lambda x:(x + 1),lb = 0,ub = np.inf,* G.args,** G.kwds)

     

TypeError:expect()得到了一个意外的关键字参数' mu'

如果我尝试使用普通的随机变量

F = norm(loc=100,scale=30) 
F.dist.expect(func=lambda x:(x+1), lb=0, ub=np.inf, *F.args, **F.kwds)  

代码有效并返回101.0029332762359。

我应该如何正确定义r.v. G这样我可以使用任何函数计算期望值?我使用Python 2.7.8(默认,2014年7月26日,15:25:14),IPython 2.1.0。

祝福,约翰内斯

1 个答案:

答案 0 :(得分:4)

有些函数需要位置而不是关键字参数。 stats.poisson的{​​{1}}就是一个很好的例子。错误

dist.expect

表示TypeError: expect() got an unexpected keyword argument 'mu' 没想到关键字参数expect。但是如果你只是将mu的值作为位置参数传递,那么你会发现mu有效:

G = stats.poisson(30)

此外,import numpy as np import scipy.stats as stats G = stats.poisson(30) print(G.dist.expect(lambda x: (x+1), G.args, lb=0, ub=np.inf)) # 31.0 必须作为第二个参数传递给G.args。您可以通过查看expect的帮助文档字符串来查看此内容:

G.dist.expect

因此请使用

In [14]: help(G.dist.expect)
Help on method expect in module scipy.stats._distn_infrastructure:

expect(self, func=None, args=(), loc=0, lb=None, ub=None, conditional=False) method of scipy.stats._discrete_distns.poisson_gen instance

而不是

G.dist.expect(lambda x: (x+1), G.args, lb=0, ub=np.inf)

G.dist.expect(func=lambda x:(x+1), lb=0, ub=np.inf, *G.args, **G.kwds) 是一个空的dict,所以如果你想在最后传递它并不重要。