В scipy.optimize.minimize, как я могу передать необязательные аргументы в кортеж args = ()? - PullRequest
0 голосов
/ 06 февраля 2020

Итак, у меня есть некоторые функции

def fun(x,y=None):
    # Do some stuff

, и я хочу минимизировать эту функцию над x, но иногда Я хочу иметь дополнительный аргумент y. (По сути, я хочу, чтобы y всегда принимал значение по умолчанию, кроме случаев, когда я минимизирую.)

Обычно, если бы функция была просто def fun(x,y):, я мог бы сделать scipy.optimize.minimize(x,args=(y)). Но что мне делать, если y является необязательной переменной? установка args=(y=value) дает мне неверный синтаксис (и, конечно, он выглядит очень неправильно), но я не уверен, какой будет правильный синтаксис.

Я использую Python 3.7, если это отношение.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы не можете. minimize принимает только необязательные аргументы без ключевых слов для функции, которую она вызывает. Это написано в документации , поскольку описывает функцию, которая будет вызываться как fun(x, *args), без каких-либо необязательных аргументов.

Если ваша функция f(x, y=None, z=None), вам придется вызвать scipy.optimize.minimize(f, x, (y, z)).

Вместо этого я бы построил лямбду, которая передает аргументы как ключевые слова напрямую. Таким образом выполняется:

scipy.optimize.minimize(lambda x: f(x, z=0), x)

, который проясняет, какие необязательные аргументы вы передаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...