Установка только одного параметра функции со многими параметрами в python

В python у меня есть функция, которая имеет много параметров. Я хочу поместить эту функцию в набор данных, но используя только один параметр, остальные параметры, которые я хочу предоставить самостоятельно. Вот пример:

def func(x,a,b):
   return a*x*x + b

for b in xrange(10):
   popt,pcov = curve_fit(func,x1,x2)

В этом я хочу, чтобы фитинг выполнялся только для a, а параметр b принимает значение переменной цикла. Как это можно сделать?

Ответ 1

Вы можете обернуть func в лямбда, как показано ниже:

def func(x,a,b):
   return a*x*x + b

for b in xrange(10):
   popt,pcov = curve_fit(lambda x, a: func(x, a, b), x1, x2)

Лямбда - анонимная функция, которая в Python может использоваться только для простых функций одной строки. В основном, он обычно используется для уменьшения количества кода, когда нет необходимости назначать имя функции. Более подробное описание приведено в официальной документации: http://docs.python.org/tutorial/controlflow.html#lambda-forms

В этом случае lambda используется для фиксации одного из аргументов func. Недавно созданная функция принимает только два аргумента: x и a, тогда как b фиксируется на значение, взятое из локальной переменной b. Эта новая функция затем передается в curve_fit в качестве аргумента.

Ответ 2

Существует более простой вариант, если вы хотите/можете редактировать исходную функцию.

Переопределите свою функцию как:

def func(x,a):
    return a*x*x + b

Затем вы можете просто поместить его в свой цикл для параметра b:

for b in xrange(10):
   popt,pcov = curve_fit(func, x1, x2)

Предостережение: функция должна быть определена в том же script, в котором она вызвана для этого.