scipy.optimize.curvefit (): la matriz no debe contener infs ni NaNs
Estoy tratando de ajustar algunos datos a una curva en Python usandoscipy.optimize.curve_fit
. Estoy corriendo en el errorValueError: array must not contain infs or NaNs
.
Yo tampoco creo en mix
oy
los datos contienen infs o NaNs:
>>> x_array = np.asarray_chkfinite(x_array)
>>> y_array = np.asarray_chkfinite(y_array)
>>>
Para dar una idea de lo que mix_array
yy_array
parece que en cualquier extremo (x_array
es cuenta yy_array
es cuantiles):
>>> 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])
Y mi función:
>>> def func(x,alpha,beta,b):
... return ((x/1)**(-alpha) * ((x+1*b)/(1+1*b))**(alpha-beta))
...
Que estoy ejecutando con:
>>> popt, pcov = curve_fit(func, x_array, y_array)
dando como resultado el seguimiento de la pila de errores:
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
soyadivinación ¿El error podría no ser con respecto a mis arreglos, sino un arreglo creado por scipy en un paso intermedio? He investigado un poco los archivos fuente relevantes de Scipy, pero las cosas se ponen difíciles depurando rápidamente el problema de esa manera. ¿Hay algo obvio que estoy haciendo mal aquí? He visto casualmente mencionado en otras preguntas que a veces ciertas suposiciones de parámetros iniciales (de las cuales actualmente no tengo ninguna explícita) podrían dar lugar a este tipo de errores, pero incluso si este es el caso, sería bueno saberlo.a)
porque eso es yb)
como evitarlo