Scipy фитинг с параметрами в векторе - PullRequest
2 голосов
/ 13 марта 2019

Насколько я знаю, функция Scipy curve_fit явно принимает параметры подгонки. Например, при подгонке полинома:

def func(x, c0, c1, c2):
    return c0 + c1 * x + c2 * x**2

Возможно ли способ (возможно, другая эквивалентная функция) определять параметры через вектор? E.g.:

def func(x, C):
    y = 0.0
    for i, ci in enumerate(C):
        y += ci * x**i
    return y

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

1 Ответ

1 голос
/ 13 марта 2019

Да, это возможно, но вы должны заранее знать количество аргументов (как вам кажется).

Пример:

from scipy.optimize import curve_fit

def func(x, *C):
    y = sum(c * x ** n for n, c in enumerate(C))
    return y

Однако вам необходимо указать p0 аргумент в вызове curve_fit;в этом случае, поскольку вы знаете, что у вас есть 24 параметра, если у вас есть первоначальное предположение для их значений, вы можете передать массив, содержащий 24 значения.Если нет, вы можете просто использовать np.ones(24).

...