Python编织以加速我们的代码

时间:2014-05-22 16:16:41

标签: python linux scipy

我们非常感谢任何帮助,因为我们使用我们的程序让我们疯狂,使用C语言更快。

获得的值不会发生变化,始终为0,0,0,0

以下是在Linux中运行的代码:

from scipy import weave

pasa = 0
coorX =  -11.8
coorY = -7.9
INC=0.01296
##def weave_update():

code="""
int i,j, pasa;
double coorX, coorY,INC;

for (i=0; i < 1296;i++){

    yminf = coorY + INC*(i);
    ymaxf = yminf + INC;

    for (j=0; j < 1936;j++){

        xminc = coorX + INC*(j); 
        xmaxc = xminc + INC;
        pasa = 1;
        break;
    }
    if (pasa == 1){
    break;
    }
}
"""
weave.inline(code,['yminf','xminc','xmaxc','ymaxf'],type_converters=weave.converters.blitz,compiler='gcc')
print yminf,xminc,xmaxc,ymaxf

1 个答案:

答案 0 :(得分:2)

看起来有两个问题。首先,您需要传递C代码需要从python访问的所有变量。因此,您的inline电话必须是:

weave.inline(code, ['coorX','coorY','INC'])

其次,您需要从编织代码中返回所需的值,因为在C中修改它们并不会影响它们在Python中的值。这是一种方法:

py::tuple ret(4);
ret[0] = yminf;
ret[1] = xminc;
ret[2] = xmaxc;
ret[3] = ymaxf;
return_val = ret;

通过这些修改,以下文件似乎可以正常工作:

from scipy import weave

coorX = -11.8
coorY = -7.9
INC = 0.01296

code="""
int i,j, pasa = 0;
double yminf,xminc,xmaxc,ymaxf;

for (i=0; i < 1296;i++){

    yminf = coorY + INC*(i);
    ymaxf = yminf + INC;

    for (j=0; j < 1936;j++){

        xminc = coorX + INC*(j);
        xmaxc = xminc + INC;
        pasa = 1;
        break;
    }
    if (pasa == 1){
    break;
    }
}
py::tuple ret(4);
ret[0] = yminf;
ret[1] = xminc;
ret[2] = xmaxc;
ret[3] = ymaxf;
return_val = ret;
"""
yminf,xminc,xmaxc,ymaxf = weave.inline(code,['coorX','coorY','INC'])
print yminf,xminc,xmaxc,ymaxf