Python在加快我们的速度

2024-06-28 11:41:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我们真的很感激任何帮助,因为我们正在疯狂地用我们的程序使它更快地使用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

Tags: 程序forcodeincbreakconvertersweave地用
1条回答
网友
1楼 · 发布于 2024-06-28 11:41:23

看起来有两个问题。首先,需要传入C代码需要从python访问的所有变量。因此,您的inline呼叫需要:

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

其次,需要从weave代码中返回所需的值,因为在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

相关问题 更多 >