泊松分布拟合

我需要将泊松分布拟合到一组数据:

fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1) # Target function
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
p0 = [1., 2.] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:], args=(bins_mean, n))

我使用SciPy documentation中给出的示例进行了说明.

如果我评论伽玛函数部分,它就像一个魅力,因此问题就存在了,但是我不知道如何解决它.

我收到以下错误:

TypeError: can only concatenate list (not "int") to list

适合的输入参数是plt.hist的输出,我检查了一下,类型为numpy ndarray

解决方法:

fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1) # Target function
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function
p0 = [1., 2.] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:], args=(bins_mean, n))

由于您说它不带math.gamma(x 1)部分就可以工作,我想如果您进行更改,它将可以工作

fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/math.gamma(x+1)

from scipy.misc import factorial 
fitfunc = lambda p, x: p[0]*pow(p[1],x)*pow(e,-p[1])/factorial(x)

由于math.gamma不喜欢列表(或我猜不是浮点数的任何东西),而阶乘可以正确地使用列表?

附带问题:为什么您使用战俘,而不是仅使用**?

上一篇:python-如何使用numpy / scipy生成矩形脉冲


下一篇:python-集成控制系统无法正常运行