проблема минимизации TypeError: объект 'numpy.float64' не вызывается

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

Трассировка (последний последний вызов): Файл "plot2.py", строка 72, в res = минимизация (rosen (al, c), c, args = (al)) Файл "/home/usd/.local/lib/ python3.6/site-packages/scipy/optimize/_minimize.py", строка 604, в минимизации return _minimize_bfgs(fun, x0, args, jac, callback, **options) File "/home/usd/.local/lib /python3.6/site-packages/scipy/optimize/optimize.py", строка 1003, в файле _minimize_bfgs old_fval = f(x0) "/home/usd/.local/lib/python3.6/site-packages/scipy /optimize/optimize.py", строка 327, в функции возврата function_wrapper (*(wrapper_args + args)) TypeError: объект 'numpy.float64' не вызывается

это код:

def rosen(xi,c):
return sum((xi[1:] - xi[:-1]-c)*(xi[1:] - xi[:-1]-c))

for index, k in enumerate(jo):
    for ko in range(len(alp2[index])):
        al = alp[index]
        al2 = alp[index+1]
        al = np.array(al)
        be = alp2[index][ko]
        be2 = alp2[index][ko] 
        c = 5
        print(rosen(al,c))
        res = minimize(rosen(al,c), c, args=(al))

person alberto orell    schedule 01.04.2020    source источник


Ответы (1)


Вы должны указать вызываемую функцию в качестве первого аргумента для минимизации. В вашем случае вы оцениваете функцию, поэтому вы указываете возвращаемое значение в качестве первого аргумента, который является числом с плавающей запятой, которое не может быть вызвано, отсюда и ошибка. Ниже приведен упрощенный пример вашего кода с рабочим вызовом функции:

import numpy as np
from scipy.optimize import minimize

def rosen(xi,c):
    return sum((xi[1:] - xi[:-1]-c)*(xi[1:] - xi[:-1]-c))


c = 5
res = minimize(rosen, x0=np.zeros(2), args=(c,))
print(res)
person onodip    schedule 03.04.2020