Как исправить «TypeError: f () принимает 3 позиционных аргумента, когда 4 получили ошибку» при подгонке кривой - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь найти гауссову функцию смещения по x, которая при свертывании (с numpy.convolve) с одним набором данных подходит для другого.Однако когда я пытаюсь сопоставить эту сложную серию операций с моими данными, это дает мне ошибку в отношении количества аргументов.

У меня есть 5 сигналов, значения которых записаны в несколько разные даты.Теоретически, последние 4 сигнала (g, r, i и z) могут быть смоделированы как равные первому сигналу u после того, как они были свернуты с некоторой функцией свертки, которую я смоделировал как гауссову кривую.

Я пытаюсь найти параметры mu и sigma, которые описывают гауссиан для каждой из 4 сверток сигналов.Я делаю это путем интерполяции первого сигнала u, чтобы сгенерировать больше точек, описывающих его, путем помещения этих интерполированных значений через свертку с неизвестным гауссианом, а затем с помощью функции scipy curve_fit, чтобы найти параметры, которые наилучшим образом соответствуют каждому из 4 записанных сигналов.

Я пытался вложить свои функции различными способами, я пытался поместить все функции в одну команду, а не вызывать функции, которые я определяю сам, это самое близкое к успешному выполнению этой задачи.

#defined the gaussian function with the 3 parameters a mu and sig to be found. 
#test_x is a numpy.linspace array with numbers from -10 to 10.
def gauss(a, mu, sig):
    return a * np.exp(-np.power(test_x - mu, 2.) / (2 * np.power(sig, 2.)))

#defined the convolution of the callable interpolated u data (interpu) with 
#the defined gaussian function gauss
def gaussconv(a, mu, sig):
    return np.convolve(interpu, gauss(a, mu, sig))

#defined a function that should in theory model the convolved interpolation 
#and gaussian against the inputted x data datex and magnitude dana normx, with 
#the initial guesses for a mu and sig being 0.15, 1, and 0.5 respectively
def fit(datex, normx):
    return spo.curve_fit(gaussconv, datex, normx, p0=[0.15,1,0.5])

В идеале он должен выводить с вычисленными значениями mu и sig, которые лучше всего соответствуют свертке с записанными данными, но вместо этого я получаю это сообщение об ошибке:

TypeError: gaussconv() takes 3 positional arguments but 4 were given. 

Любая помощь будетоценены.

1 Ответ

0 голосов
/ 08 апреля 2019

curve_fit () передает данные И три параметра (всего 4 элемента) в gaussconv (). Первым параметром для gaussconv () должны быть данные.

...