2013-07-30 3 views
3

Я следующий набором данныхпитона фитинг с использованием scipy.optimize

angles =np.arange(-90,91,15) 
n_col_cnts =([ 0.08692008,0.46557143,0.7282595,0.89681908,0.97057961,1.,0.99488705,0.91823478,0.84187586, 0.73110934,0.53363229,0.25338418,0.01328528]) 

Я хотел бы, чтобы соответствовать гауссовому к этим данным с использованием optimize.leastsq() от scipy но достиг соблазн. Вот что я пытался от here

fitfunc = lambda p, x: p[0]*math.exp(-((x-p[1])/p[2])**2) #Target function 
errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function 
p0 = [1., 0., 30.] # Initial guess for the parameters 
fit, success = optimize.leastsq(errfunc, p0[:], args=(angles,n_col_cnts)) 

Однако я получаю сообщение об ошибке

TypeError: only length-1 arrays can be converted to Python scalars

, которые я не понимаю. Что я сделал не так?

ответ

4

Я думаю, fitfunc должен работать с массивами. Поменять math.exp10 на np.exp

1

Как говорит Джанн, для поддержки большого многомерного «х» в качестве независимой переменной это на самом деле их матрица, что меня совсем немного, чтобы узнать вчера , В результате он должен быть полностью векторным, поэтому вам нужно использовать np.exp, чтобы позволить экспоненту элементов матрицы; а не матрица мощности. Параметрам разрешено занимать пробелы «m», но в функции, которую вы передаете независимой переменной, может принимать только один.

Я ненавижу делать это, но кто-то вчера задавал подобный вопрос, и я написал достаточно в ответ глубины, если вы заинтересованы:

Curve fitting in Scipy with 3d data and parameters

Смежные вопросы