这篇文章建立在我之前的问题上
我有一些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)
感谢您提前寻求帮助