В этом случае упрощение - это как раз мой уровень. Еще раз спасибо.
опытке создать пример сscipy.optimize curve_fit
Я обнаружил, что Сципи кажется несовместимым с Pythonmath
модуль. Пока функцияf1
работает отлично,f2
выдает сообщение об ошибке.
from scipy.optimize import curve_fit
from math import sin, pi, log, exp, floor, fabs, pow
x_axis = np.asarray([pi * i / 6 for i in range(-6, 7)])
y_axis = np.asarray([sin(i) for i in x_axis])
def f1(x, m, n):
return m * x + n
coeff1, mat = curve_fit(f1, x_axis, y_axis)
print(coeff1)
def f2(x, m, n):
return m * sin(x) + n
coeff2, mat = curve_fit(f2, x_axis, y_axis)
print(coeff2)
Полный возврат
Traceback (most recent call last):
File "/Documents/Programming/Eclipse/PythonDevFiles/so_test.py", line 49, in <module>
coeff2, mat = curve_fit(f2, x_axis, y_axis)
File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/minpack.py", line 742, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/minpack.py", line 377, in leastsq
shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/minpack.py", line 26, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "/usr/local/lib/python3.5/dist-packages/scipy/optimize/minpack.py", line 454, in func_wrapped
return func(xdata, *params) - ydata
File "/Documents/Programming/Eclipse/PythonDevFiles/so_test.py", line 47, in f2
return m * sin(x) + n
TypeError: only length-1 arrays can be converted to Python scalars
Сообщение об ошибке появляется со списками иnumpy
массивы в качестве входных данных. Это влияет на всеmath
функции, которые я тестировал (см. функции в импорте) и должен иметь какое-то отношение к тому, как математический модуль управляет входными данными. Это наиболее очевидно сpow()
функция - если я не импортирую эту функцию изmath
, curve_fit
правильно работает сpow()
.
Очевидный вопрос - почему это происходит и как можноmath
функции будут использоваться сcurve_fit
?
П.С .: Пожалуйста, не обсуждайте, чтобы данные выборки не подходили линейно. Это было выбрано для иллюстрации проблемы.