Несколько ограничений в Scipy - PullRequest
0 голосов
/ 08 мая 2019

Мне нужно использовать несколько ограничений в 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 Ответ

0 голосов
/ 09 мая 2019

Вы можете обойти это, используя eval функцию python.В этом конкретном случае он будет делать именно то, что вы хотите.Если у вас есть строка и вы хотите получить доступ к функции с таким именем, просто напишите eval, f.ex 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
...