ValueError:无法确定拟合参数的数量。“曲线拟合中的问题”

斯卡达塔

我是python的新手,所以我的知识不足。我有一个名为“ tlove_cc_seq2_k2_NL3.dat”的数据文件。我想对数据拟合曲线。我使用的代码如下:

...

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    import math
    import pandas as pd
    import lmfit
    from lmfit import Model
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    from array import *

    def test(x, a, b, c): 
         return (a + b*math.log(x) + c*math.log(x)**2)

    func = np.vectorize(test)

    data_k2_2fl_NL3=np.loadtxt('tlove_cc_seq2_k2_NL3.dat')
    plt.plot(data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5], 'b-', label='data')
    popt, pcov = curve_fit(func, data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5])
    popt

    plt.plot(data_k2_2fl_NL3[:,8], func(data_k2_2fl_NL3[:,8], *popt), 'r-',
             label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
    popt, pcov = curve_fit(func, data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5], bounds=(-20, 
    [30., 30., 20.5]))
    popt

    plt.plot(data_k2_2fl_NL3[:,8], func(data_k2_2fl_NL3[:,8], *popt), 'g--',
             label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
    plt.xlabel('x')
    plt.ylabel('y')
    plt.legend()
    plt.show()

...

我收到的错误如下:

... ValueError Traceback(最近一次通话最后一次)在13 #y = data [:, 1] 14 plt.plot(data_k2_2fl_NL3 [:,8],data_k2_2fl_NL3 [:,5],'b-',label ='data ')---> 15步,pcov = curve_fit(func,data_k2_2fl_NL3 [:,8],data_k2_2fl_NL3 [:,5])16步17

    ~/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in curve_fit(f, xdata, 
    ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs)
        678         args, varargs, varkw, defaults = _getargspec(f)
        679         if len(args) < 2:
    --> 680             raise ValueError("Unable to determine number of fit parameters.")
        681         n = len(args) - 1
        682     else:

    ValueError: Unable to determine number of fit parameters.

我该如何解决?谢谢。

罗伯特·金

我认为问题在于该curve_fit函数无法通过自省来确定参数的数量,因为您要它适合testnp.vectorize函数)被包装在该函数中。

我尝试了一个最小的示例,在该示例中我使用了test未向量化函数,并且可以正常工作:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def test(x, a, b, c): 
        return (a + b*np.log(x) + c*np.log(x)**2)

func = np.vectorize(test)

#Create some dummy data
x_data = list(range(1, 11))
y_data = np.log(x_data) + np.log(x_data)**2 + np.random.random(10)

plt.plot(x_data, y_data, 'b-', label='data')
popt, pcov = curve_fit(test, x_data, y_data)
popt

如果vectorize出于性能原因需要,也可以传递一个参数p0作为初始参数的数组。例如:

popt, pcov = curve_fit(func, x_data, y_data, p0=[1,1,1])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

曲线拟合数据问题

来自分类Dev

带有参数范围的曲线拟合

来自分类Dev

简单的曲线拟合

来自分类Dev

曲线拟合分布

来自分类Dev

scipy曲线拟合失败,无法拟合洛伦兹

来自分类Dev

SciPy中的指数曲线拟合

来自分类Dev

如何定义曲线拟合中的函数?

来自分类Dev

R中的非线性曲线拟合

来自分类Dev

曲线拟合到指数

来自分类Dev

JS指数曲线拟合

来自分类Dev

指数曲线拟合Matlab

来自分类Dev

曲线拟合-数据集

来自分类Dev

预测曲线拟合matlab

来自分类Dev

在 MATLAB 中使用曲线拟合估计 Poisson PDF 参数

来自分类Dev

无法将正态曲线拟合到分组的直方图

来自分类Dev

对R中的经验数据进行曲线拟合

来自分类Dev

如何判断SciPy中的指数曲线拟合程度如何?

来自分类Dev

如何在曲线拟合中强制特定点

来自分类Dev

gnuplot中的功率曲线拟合获得冗余值

来自分类Dev

Matlab中的n维非线性曲线拟合

来自分类Dev

对R中的经验数据进行曲线拟合

来自分类Dev

将高斯曲线拟合到python中的数据

来自分类Dev

如何判断SciPy中的指数曲线拟合程度如何?

来自分类Dev

曲线拟合工具箱中的时间向量

来自分类Dev

矢量投影以确定拟合曲线中的弯头

来自分类Dev

python numpy / scipy曲线拟合

来自分类Dev

SciPy曲线拟合失败幂律

来自分类Dev

使用Gnuplot的逼近图/曲线拟合

来自分类Dev

Scipy的最佳曲线拟合极限