Я пытаюсь использовать функцию Scipy's Curve_fit для определения параметров модели. Я использовал Python curve_fit с несколькими независимыми переменными в качестве отправной точки и смог удовлетворить свои потребности, но теперь я хотел бы использовать два входных набора данных для получения параметров модели, которые будут совместно использоваться этими двумя наборами данных ( В долгосрочной перспективе я хотел бы использовать более двух наборов данных, но в качестве отправной точки я использую два).
Я подумал, что самым простым способом сделать это может быть использование curve_fit и ввод моих данных в виде матрицы. В качестве очень надуманного примера я попытался «дополнить» пример, приведенный в ссылке выше (я понимаю, что это не самый красивый код - я просто пытаюсь понять, как я на самом деле должен это делать).
def func(X, a, b, c):
x,y = X
result0 = np.log(a) + b*np.log(x[0]) + c*np.log(y[0])
result1 = np.log(a) + b*np.log(x[1]) + c*np.log(y[1])
return np.array([result0, result1])
# some artificially noisy data to fit
x0 = np.linspace(0.1,1.1,101)
y0 = np.linspace(1.,2., 101)
x1 = np.linspace(0.1,1.1,101)
y1 = np.linspace(1.,2., 101)
a, b, c = 10., 4., 6.
x = np.array([x0,x1])
y = np.array([y0,y1])
z = func((x,y), a, b, c)
z[0] = z[0] * 1 + np.random.random(101)/100
z[1] = z[1] * 1 + np.random.random(101)/100
# initial guesses for a,b,c:
p0 = 8., 2., 7.
print curve_fit(func, (x,y), z, p0)
Этот скрипт возвращает следующую ошибку:
Файл "curveFitting.py", строка 135, в
print curve_fit (func, (x, y), z, p0)
Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/minpack.py", строка 533, в curve_fit
res = leastsq (func, p0, args = args, full_output = 1, ** кВт)
Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/optimize/minpack.py", строка 371, в leastsq
повысить TypeError ('Неправильный ввод: N =% s не должен превышать M =% s'% (n, m))
Ошибка типа: неправильный ввод: N = 3 не должно превышать M = 2
Пытаюсь ли я использовать curve_fit непреднамеренно / неуместно? Есть ли другая функция / библиотека, которую я должен использовать вместо этого?