将我的代码从cpp转换为python给我错误的结果

时间:2016-12-18 11:04:18

标签: python

我正在尝试将我的代码从cpp转换为python 代码所做的是读取2d数组分为w * w的相等部分,并计算w * w部分中所有条目的平均值,并将其存储在另一个数组中 代码在cpp中运行正常,但是当我在python中编写几乎相似的代码时,它给出了错误的结果 我的cpp代码是'

for (int h=0,r=0;h<HEIGHT;r=0,h+=w)
{
    for (;r<WIDTH;r+=w)
    {
        for (int i=h;i<h+w;i++)
        {
            for (int j=r;j<r+w;j++)
            {
                averageImArray[h/w][r/w]+=imArray[i][j];
            }
        }
        averageImArray[h/w][r/w]/=w*w;
    }
}

和相应的python代码是

h=0
r=0
while (h<height):
    while (r<width):
        i=h
        while (i<h+w):
            j=r
            while (j<r+w):
                averageImArray[h/w][r/w]+=imArray[i][j]
                j+=1
            averageImArray[h/w][r/w]=(averageImArray[h/w][r/w])/(w*w)
            i+=1
        r+=w
    r=0
    h+=w

有人可以突出显示错误

1 个答案:

答案 0 :(得分:2)

Python控件块由缩进控制。

在您的c ++代码中,averageImArray[h/w][r/w]/=w*w;是第二个循环的一部分 在你的python代码中,它是第三个循环的一部分。

基本上,它不是同一种算法。您可能感到困惑,因为您试图直接在Python中编写C ++代码。它不仅不是编写代码的Pythonic方式,而且效率更低,更容易出错。我建议你使用Pythons for语法重写代码:

for h in range(0, height, w): #for python 2.x it should be xrange
    for r in range(0 , width, w):
        for i in range(h, h+w):
            for j in range(r, r+w):
                averageImArray[h/w][r/w]+=imArray[i][j]
        averageImArray[h/w][r/w]=(averageImArray[h/w][r/w])/(w*w)

现在锅炉板已经消失了,而且代码所属的位置更加明显。下一步是消除深层嵌套循环。最里面的两个属于一个单独的函数。