Форум сайта python.su
Функция scipy.optimize.fmin_l_bfgs_b вызывается вот так:
xpost,f,d = lbfgsb.fmin_l_bfgs_b(gcv,xpost,fprime=None,factr=10.,\ approx_grad=True,bounds=[(log10(sMinBnd),log10(sMaxBnd))],\ args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder))
def gcv(p,Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder):
Отредактировано serzin (Июнь 18, 2020 18:26:23)
Офлайн
serzinМожет, забыли передать. Может быть, он передаётся внутри.
Откуда она берет аргумент p?
>>> def f(a, b, c): ... return a + b + c ... >>> def g(func, args=(0, 0)): ... return func(10, args[0], args[1]) ... >>> g(f, args=(20, 30)) 60 >>>
Отредактировано py.user.next (Июнь 18, 2020 23:24:29)
Офлайн
Там в теле функции gcv идет вот так
def gcv(p,Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder): s = 10**p; Gamma = 1./(1+(s*abs(Lambda))**smoothOrder);
args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder)
Офлайн
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
scipy.optimize.fmin_l_bfgs_b(func, x0, fprime=None, args), approx_grad=0, bounds=None, m=10, factr=10000000.0, pgtol=1e-05, epsilon=1e-08, iprint=-1, maxfun=15000, maxiter=15000, disp=None, callback=None, maxls=20)
func:callable f(x,*args)
Function to minimise.
Отредактировано 4kpt_V (Июнь 20, 2020 13:09:07)
Офлайн
4kpt_VТак вот как раз вызова этой функции я и не понимаю. *args она взяла отсюда
func:callable f(x,*args)Function to minimise.
args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder)
Офлайн
Скорее всего Х передается итерациионо при обсчете. Т.е. метод ожидает получить объект функции в который он будет “пихать” первым аргументом какие-то значения для обсчета.
Офлайн
serzinОн берёт это p где-то внутри функции, то есть оно не передаётся снаружи внутрь, а внутри прямо появляется. Часть аргументов для функции передаётся снаружи внутрь, а часть аргументов для функции берётся изнутри. И потом все эти аргументы, взятые снаружи и созданные внутри, подаются вместе в вызов одной функции.
И я, когда ставлю точку останова, вижу в этой p некое значение. Но убейся не могу понять откуда он ее берет.
>>> def fmin_l_bfgs_b(func, args=(0, 0)): ... n = 10 ... return func(n, args[0], args[1]) ... >>> def gcv(a, b, c): ... return a + b + c ... >>> fmin_l_bfgs_b(gcv, args=(20, 30)) 60 >>>
Отредактировано py.user.next (Июнь 21, 2020 00:17:36)
Офлайн
Спасибо огромное. Дошло наконец.
Офлайн