weave.inline не совместим с scipy.optimize.leastsq? - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь ускорить процедуру минимизации функции, которая использует функцию 'leastsq' из scipy.optimize.То есть я делаю следующее:

    def errfn(pars):
        return myfn(ts,pars)-data
    pfit,success = scipy.optimize.leastsq(errfn,p0,Dfun=Dfun,col_deriv=1)

errfn - это функция, которая возвращает остатки;Дфун возвращает матрицу Якоби;p0 - исходное предположение параметра.В чистом виде это работает.Теперь, если я, например, изменю myfn (или Dfun) на код C, используя weave.inline, компилятор weave.inline прекратит работу.Когда я вызываю функцию самостоятельно, она возвращает правильное значение;только в контексте вызова функции leastsq компилятор ломается.Есть идеи, что здесь происходит?Ниже показано, как я использую weave.inline:

def myfn(t,p):
 eta = p[0]
 theta = p[1]
 c = p[2]
 tau = p[3]
 nt = len(t)
 fs = zeros(nt)
 code = """
       double T = 10000;
       for (int i=0; i<nt; i++){
        double tprime = T*sin(pi*(t(i)-tau)/T)/pi/eta;
        fs(i) = 1-theta + 0.5*theta*(2 - tanh(c*(tprime + 0.5)) + tanh(c*(tprime - 0.5)));
       }
       """

weave.inline(code,['fs','nt','eta','theta','c','tau','t','pi'],type_converters=converters.blitz)
return fs    
...