Scipy Curve Fit:提供的函数不返回有效的float

时间:2015-09-07 09:32:18

标签: python numpy scipy

虽然我经常访问这里,但这是我的第一篇文章,如果我没有正确格式化,请原谅。

我正在尝试将Scipy Curve Fit用于一个似乎只适用于一小组输入的方程式。我还不能发布图像,但下面是基本等式的链接。当我尝试曲线拟合到该等式时,我得到“错误:提供的函数不返回有效的浮点数”。我对python还不是很有经验,但是我猜测由于某种原因,Curve Fit会采取太大的步骤并进入NaN区域?

http://i.stack.imgur.com/2PaJ3.gif

我一直在研究这个问题已经有一段时间了,但我的想法已经用完了。我做错了还是我应该尝试另一种技巧/工具?

这是github上笔记本的另一个链接。如果您有兴趣,请向下滚动一半到标题“2.曲线拟合”。

https://github.com/JAmarel/LiquidCrystals/blob/master/ElectroOptics/PandaImportExcelSheets.ipynb

感谢您一看。

1 个答案:

答案 0 :(得分:0)

在这种情况下,通常最好从一个小玩具问题开始,这个问题会再现错误。

此特定错误可能来自this line。虽然神秘,它会尝试将函数的输入转换为浮点数组(NPY_DOUBLE),如果失败则抛出错误。

好的,这是如何触发错误:

In [3]: import numpy as np

In [4]: from scipy.optimize import curve_fit

In [5]: x = np.array([1.0, 2., 3, 4.])

In [6]: y = x

In [7]: def f(x, a):                       # try a nan
   ...:     return np.nan
   ...: 

In [9]: curve_fit(f, x, y, 2.0)
/home/br/virtualenvs/scipy-dev/local/lib/python2.7/site-packages/scipy/optimize/minpack.py:604: OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)
Out[9]: (array([ 2.]), array([[ inf]]))

不,nan会产生一些不同的输出。让我们尝试一下字符串:

In [10]: def g(x, a):
   ....:     return 'nonsense'
   ....: 

In [11]: curve_fit(g, x, y, 2.0)
<snip>
TypeError: unsupported operand type(s) for -: 'str' and 'numpy.ndarray'

也有不同的错误。好的,让我们尝试一个复数:

In [12]: def h(x, a):
   ....:     return 1j
   ....: 

In [13]: curve_fit(h, x, y, 2.0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
<snip>

error: Result from function call is not a proper array of floats.

宾果。现在我开始检查你的函数是否在复杂的平面内进行某些输入。