虽然我经常访问这里,但这是我的第一篇文章,如果我没有正确地记下格式,请原谅。
我正在尝试使用Scipy Curve Fit对一个方程进行拟合,这个方程似乎只对一小部分输入表现良好。我还不能发布图片,但下面有一个基本方程的链接。当我尝试对该方程进行曲线拟合时,我得到“错误:提供的函数不返回有效的浮点数”。我对python还不是很有经验,但我猜出于某种原因,Curve Fit走了太多的步长,跑到了NaN区域?
我已经在这个问题上工作了一段时间,但我已经没有想法了。这是我做错了吗?还是有其他技巧/工具我应该尝试一下?
这是github上笔记本的另一个链接。如果你感兴趣,向下滚动到大约一半的标题"2.曲线拟合“。
https://github.com/JAmarel/LiquidCrystals/blob/master/ElectroOptics/PandaImportExcelSheets.ipynb
感谢您的关注。
发布于 2015-09-07 10:41:15
在这种情况下,通常最好从复制错误的小玩具问题开始。
这个特定的错误很可能来自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.
对啰。现在,我将开始检查您的函数是否游荡到复平面中,以获得一些输入。
https://stackoverflow.com/questions/32435364
复制相似问题