曲线拟合优化scipy python numpy

时间:2016-11-27 17:18:43

标签: python scipy

这篇文章建立在我之前的问题上

我有一些X数据和一些Y数据,Y数据可以作为X数据的加权和,我的问题是找到最适合的系数。

我现在明白了一种方法,虽然我意识到它可能不是最佳或最佳方式。

然而,我所拥有的X数据有时可能会被移位,这样只有在将每列X向上或向下移动N个增量后才能获得最佳拟合。

我试图看看np.roll是否可以用来做这个但是因为我的函数现在需要nff.roll的系数和整数值,可以用来将列向上或向下移动N改善健康。

我认为我的主要问题是我不明白如何将这两种不同的参数传递给curvefit - 是否可能?

也许np.roll不是最好的方法吗?因此,任何有关其他方式的建议也将受到赞赏。

在下面的示例中,将第二列移动-1会使Xdata更适合Ydata。

xdata = np.array([[1.0, 1.0],[1.0, 1.0], [2.0, 3.0], [4.0, 2.0], [2.0, 1.0],[1.0, 1.0]])

ydata = np.array([3.0, 5.0, 6.0, 9.0, 5.0, 3.0])


def fitfunc(xdata, *params):
    ctx = 0.0

    # y is not yet defined by somehow I would like it to take the values passed in the second np.array defined in c below
    # the for loop should just run twice in this example

    for n in range(len(params)): 
        ctx = params[n]*np.roll(xdata[:,n], y, axis=0) + ctx  
    return ctx, y

#initial guesses for fitting parameters
c = (np.array([0.6, 0.3]), np.array([1, 1])) # the second np.array is what I would like to pass a y's 

# fit data using SciPy's Levenberg-Marquart method
nlfit, nlpcov = scipy.optimize.curve_fit(fitfunc, xdata, ydata, p0=(c), sigma=None)

print (nlfit) 

感谢您提前寻求帮助

0 个答案:

没有答案