将代码从cpp转换为python会产生错误的结果

2024-10-02 12:25:09 发布

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

我正在尝试将我的代码从cpp转换为python 代码所做的是读取一个二维数组,将它分成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

有人能指出错误吗


Tags: 代码for错误数组widthcppint平均值
1条回答
网友
1楼 · 发布于 2024-10-02 12:25:09

Python控制块由缩进控制

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

从本质上讲,它不是同一个算法。您可能会感到困惑,因为您试图直接在Python中编写C++代码。它不仅不是python式的代码编写方式,而且效率更低,更容易出错。我建议您使用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)

锅炉板现在不见了,更明显的是什么代码属于哪里。下一步是消除深度嵌套的循环。最里面的两个属于一个单独的函数

相关问题 更多 >

    热门问题