Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 18, 2020 18:22:36

serzin
Зарегистрирован: 2020-06-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

Функция 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?

Отредактировано serzin (Июнь 18, 2020 18:26:23)

Офлайн

#2 Июнь 18, 2020 23:23:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

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)

Офлайн

#3 Июнь 20, 2020 13:01:54

serzin
Зарегистрирован: 2020-06-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

Там в теле функции 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)
получаю ошибку слишком много аргументов.

Офлайн

#4 Июнь 20, 2020 13:08:05

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

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)

Офлайн

#5 Июнь 20, 2020 14:18:07

serzin
Зарегистрирован: 2020-06-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

4kpt_V
func:callable f(x,*args)Function to minimise.
Так вот как раз вызова этой функции я и не понимаю. *args она взяла отсюда
args=(Lambda,aow,DCTy,IsFinite,Wtot,y,nof,noe,smoothOrder)
а откуда она взяла х? Я видимо не понимаю чего-то простого но фундаментального.

Офлайн

#6 Июнь 20, 2020 14:35:04

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

Скорее всего Х передается итерациионо при обсчете. Т.е. метод ожидает получить объект функции в который он будет “пихать” первым аргументом какие-то значения для обсчета.

Офлайн

#7 Июнь 21, 2020 00:15:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

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)

Офлайн

#8 Июнь 21, 2020 12:55:47

serzin
Зарегистрирован: 2020-06-18
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

scipy.optimize.fmin_l_bfgs_b

Спасибо огромное. Дошло наконец.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version