Несколько ограничений в Scipy
Мне нужно использовать несколько ограничений в Scipy для оптимизации:
cons = ({'type': 'eq', 'fun': cons0},\
{'type': 'eq', 'fun': cons1},{'type': 'eq', 'fun': cons2}, ....)
Я пытаюсь сгенерировать его с помощью цикла, но cons0 или cons1 или cons3 рассматривается как строка, и я получаю ошибки.
cons= []
for i in range(3):
name = cons + str(i)
cons.append({'type': 'eq', 'fun': name})
1 ответ
Решение
Вы можете обойти это с помощью eval
функция питона. В этом конкретном случае он будет делать именно то, что вы хотите. Если у вас есть строка и вы хотите получить доступ к функции с таким именем, просто напишите eval
, например eval("cons0")
, Смотри пример
def fun0():
print "Hey!"
def fun1():
print "there"
funs = {}
for i in range(0,2):
funs[i] = eval("fun%d" % i)
print funs
funs[0]()
funs[1]()
это печатает:
{0: <function fun0 at 0x7f40ce1ab5f0>, 1: <function fun1 at 0x7f40ce1ab668>}
Hey!
there