Python Scipy曲线拟合:提供的函数不返回有效的浮点值
虽然我经常访问这里,但这是我的第一篇帖子,如果格式不正确,请原谅 我试图在一个方程上使用Scipy曲线拟合,这个方程似乎只适用于一小部分输入。我还不能发布图片,但下面是一个基本公式的链接。当我尝试曲线拟合该方程时,我得到“错误:提供的函数不返回有效的浮点”。我对python还不是很有经验,但我猜出于某种原因,曲线拟合需要太多的步骤,并且运行到一个NaN区域 这个问题我已经研究了一段时间了,但我已经没有主意了。我是做错了还是有其他的技巧/工具需要我去尝试 这里是github上笔记本的另一个链接。如果您感兴趣,向下滚动大约一半至标题“2.曲线拟合”Python Scipy曲线拟合:提供的函数不返回有效的浮点值,python,numpy,scipy,Python,Numpy,Scipy,虽然我经常访问这里,但这是我的第一篇帖子,如果格式不正确,请原谅 我试图在一个方程上使用Scipy曲线拟合,这个方程似乎只适用于一小部分输入。我还不能发布图片,但下面是一个基本公式的链接。当我尝试曲线拟合该方程时,我得到“错误:提供的函数不返回有效的浮点”。我对python还不是很有经验,但我猜出于某种原因,曲线拟合需要太多的步骤,并且运行到一个NaN区域 这个问题我已经研究了一段时间了,但我已经没有主意了。我是做错了还是有其他的技巧/工具需要我去尝试 这里是github上笔记本的另一个链接。
感谢您的关注。在这种情况下,通常最好从一个小玩具问题开始,它会再现错误 这个特定的错误可能来自于。虽然很神秘,但它试图将函数的输入转换为一个浮点数组(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
s产生一些不同的输出。让我们尝试一个字符串:
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'
[10]中的def g(x,a):
..:返回“胡说八道”
....:
[11]:曲线拟合(g,x,y,2.0)
TypeError:-:“str”和“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.
[12]中的:def h(x,a):
..:返回1j
....:
[13]:曲线拟合(h,x,y,2.0)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
TypeError:无法根据“安全”规则将数组数据从dtype('complex128')强制转换为dtype('float64')
错误:函数调用的结果不是正确的浮点数组。
宾果。现在,我将开始检查函数是否在某些输入的复杂平面内游移。我发现对于拟合因某些输入值而中断的模型非常有用-它比scipy模块更健壮。另外,如果你有一个单独的分子和分母,你也应该使用两个参数。