weave.inline与scipy.optimize.leastsq不兼容?

时间:2012-02-24 12:34:44

标签: python numpy scipy cython least-squares

我正在尝试加速使用scipy.optimize中的'leastsq'函数的函数最小化例程。也就是说,我正在做以下事情:

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

errfn是返回残差的函数; Dfun返回雅可比矩阵; p0是初始参数猜测。在纯粹的numpy,这是有效的。现在,例如,如果我改变myfn(或Dfun)以使用weave.inline合并C代码,则weave.inline编译器会中断。当我自己调用函数时,它返回正确的值;只有在被lesssq函数调用的上下文中,编译器才会中断。有什么想法在这里发生了什么?以下是我使用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    

0 个答案:

没有答案