【发布时间】:2013-01-06 08:37:49
【问题描述】:
我正在尝试使用scipy.optimize.curve_fit 将一些数据拟合到 Python 中的曲线。我遇到了错误ValueError: array must not contain infs or NaNs。
我不相信我的 x 或 y 数据包含 infs 或 NaN:
>>> x_array = np.asarray_chkfinite(x_array)
>>> y_array = np.asarray_chkfinite(y_array)
>>>
想知道我的x_array 和y_array 在两端的样子(x_array 是计数,y_array 是分位数):
>>> type(x_array)
<type 'numpy.ndarray'>
>>> type(y_array)
<type 'numpy.ndarray'>
>>> x_array[:5]
array([0, 0, 0, 0, 0])
>>> x_array[-5:]
array([2919, 2965, 3154, 3218, 3461])
>>> y_array[:5]
array([ 0.9999582, 0.9999163, 0.9998745, 0.9998326, 0.9997908])
>>> y_array[-5:]
array([ 1.67399000e-04, 1.25549300e-04, 8.36995200e-05,
4.18497600e-05, -2.22044600e-16])
还有我的功能:
>>> def func(x,alpha,beta,b):
... return ((x/1)**(-alpha) * ((x+1*b)/(1+1*b))**(alpha-beta))
...
我正在执行的操作:
>>> popt, pcov = curve_fit(func, x_array, y_array)
导致错误堆栈跟踪:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 426, in curve_fit
res = leastsq(func, p0, args=args, full_output=1, **kw)
File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 338, in leastsq
cov_x = inv(dot(transpose(R),R))
File "/usr/lib/python2.7/dist-packages/scipy/linalg/basic.py", line 285, in inv
a1 = asarray_chkfinite(a)
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 590, in asarray_chkfinite
"array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs
我猜测错误可能与我的数组无关,而是 scipy 在中间步骤中创建的数组?我已经通过相关的 scipy 来源进行了一些挖掘
文件,但事情很快就会变得毛茸茸的,以这种方式调试问题。有什么明显的我做错了吗?我在其他问题中随便提到过,有时某些初始参数猜测(我目前没有任何明确的猜测)可能会导致此类错误,但即使是这种情况,也很高兴知道@ 987654335@ 为什么会这样,b) 如何避免。
【问题讨论】:
标签: python scipy curve-fitting