Установка только одного параметра функции со многими параметрами в 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, в котором она вызвана для этого.