проблема минимизации TypeError: объект 'numpy .float64' не вызывается - PullRequest
0 голосов
/ 01 апреля 2020

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

Traceback (последний вызов был последним): файл "plot2.py", строка 72, в res = свернуть (rosen (al, c), c, args = (al)) файл "/home/usd/.local/lib/python3.6/site-packages/scipy/ optimize / _minimize.py ", строка 604, в режиме минимизации возврата 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))

1 Ответ

0 голосов
/ 03 апреля 2020

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

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...