我想用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。
祝福,约翰内斯
答案 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,所以如果你想在最后传递它并不重要。