Найти - Пользователи
Полная версия: scipy.optimize.fmin_l_bfgs_b
Начало » Python для новичков » scipy.optimize.fmin_l_bfgs_b
1
serzin
Функция 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))
Функция gcv объявлена вот так:
 def gcv(p,Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder):
Откуда она берет аргумент p?
py.user.next
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
>>>
serzin
Там в теле функции gcv идет вот так
 def gcv(p,Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder):
    s = 10**p;
    Gamma = 1./(1+(s*abs(Lambda))**smoothOrder);
И я, когда ставлю точку останова, вижу в этой p некое значение. Но убейся не могу понять откуда он ее берет. А при попытке добавить еще один агрумент в
args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder)
получаю ошибку слишком много аргументов.
4kpt_V
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.
serzin
4kpt_V
func:callable f(x,*args)Function to minimise.
Так вот как раз вызова этой функции я и не понимаю. *args она взяла отсюда
args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder)
а откуда она взяла х? Я видимо не понимаю чего-то простого но фундаментального.
4kpt_V
Скорее всего Х передается итерациионо при обсчете. Т.е. метод ожидает получить объект функции в который он будет “пихать” первым аргументом какие-то значения для обсчета.
py.user.next
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
>>>
serzin
Спасибо огромное. Дошло наконец.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB