我正在尝试将我的代码从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
有人可以突出显示错误
答案 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)
现在锅炉板已经消失了,而且代码所属的位置更加明显。下一步是消除深层嵌套循环。最里面的两个属于一个单独的函数。