查找2D阵列中每列的平均值

时间:2014-10-07 07:18:18

标签: c arrays multidimensional-array

我试图找到2D数组中所有列的平均值并将它们存储到一维数组中。 从那个1D阵列我想要返回最低数字的位置。 这是我的代码,它确实产生了答案(没有编译/运行时错误)但是它给出的答案是不正确的。

int function(){
    int m, n,p;
    for(m = 0; m < NROW; m++){//I think the problem must be within this set of for loops.
        for(n = 0; n < NCOL; n++){
            averages[n] += twoD[n][m]; //averages is an array of type double
        }
    }

    for(p = 0; p < NCOL; p++){
        averages[p] = (((double)averages[p])/((double)NROW));
    }

    int d, location;
    int lowest = averages[0];
    for ( d = 1 ; d < NCOL ; ++d )
        {
            if ( averages[d] < lowest )
            {
               lowest = averages[d];
               location = d;
            }
        }
return location;
}

2 个答案:

答案 0 :(得分:3)

在for循环中,第一个for应该占用所有列,第二个for占用所有行。 例如: column = 1 然后您使用第二个for并获取该列上所有行的值行= 1,行= 2 等等。

for(n = 0; n < NCOL; n++){ \\for each column
    for(m = 0; m < NROW; m++){ \\take each row of each column
        averages[n] += twoD[m][n]; //row m, column n
    }
}

答案 1 :(得分:1)

您没有表明您将averages初始化为0

for(n = 0; n < NCOL; n++){
    averages[n] = 0.;
    for(m = 0; m < NROW; m++){
        averages[n] += twoD[n][m]; //averages is an array of type double
    }
}

准确性的另一个问题(但我不认为是双值的情况)是在计算平均值时更准确,方差很小,先得到平均值的近似值然后计算:{{ 1}}其中avg(X) = x1 + avg(X - x1)x1的猜测。