虽然我经常访问这里,但这是我的第一篇文章,如果我没有正确格式化,请原谅。
我正在尝试将Scipy Curve Fit用于一个似乎只适用于一小组输入的方程式。我还不能发布图像,但下面是基本等式的链接。当我尝试曲线拟合到该等式时,我得到“错误:提供的函数不返回有效的浮点数”。我对python还不是很有经验,但是我猜测由于某种原因,Curve Fit会采取太大的步骤并进入NaN区域?
我一直在研究这个问题已经有一段时间了,但我的想法已经用完了。我做错了还是我应该尝试另一种技巧/工具?
这是github上笔记本的另一个链接。如果您有兴趣,请向下滚动一半到标题“2.曲线拟合”。
https://github.com/JAmarel/LiquidCrystals/blob/master/ElectroOptics/PandaImportExcelSheets.ipynb
感谢您一看。
答案 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.
宾果。现在我开始检查你的函数是否在复杂的平面内进行某些输入。