python - 泊松分布拟合

标签 python numpy scipy distribution curve-fitting

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

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 中给出的示例进行了此操作.

如果我评论 Gamma 函数部分,它就像一个魅力,所以问题就在那里,但我不知道如何解决它。

我收到以下错误:

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

fit的输入参数是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 不喜欢列表(或者我猜任何不是 float 的东西),而阶乘可以与列表一起正常工作?

附带问题:为什么要使用 pow,而不是只使用 **?

关于python - 泊松分布拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198538/

相关文章:

python - 我希望我的 ttk.treeview 有交替颜色

python - 区分具有多列的 Pandas 数据框

python - 如何以 pythonic 方式管理大量庞大的数组。

python - 从 Numpy Rec 数组中选择行

python - 以像素为单位指定和保存精确大小的图形

python - 使用 scipy.integrate.odeint 时如何正确实现时间相关变量

python - 如何在 PYTHON 中正确打印阿拉伯文本

python - 多参数函数的 scipy.misc.derivative

python - 如何在 Windows 上安装适用于 Python 2.7 的 Numpy?

python - 如何选择numpy数组索引的倒数?