首页 > 解决方案 > 计算一维c ++上二维数组的平均值

问题描述

我有一个二维数组 [pixels =100][sensors =50](在 data.cpp 文件中提供)我需要传感器为每个像素给出的值的平均值。结果应存储在 E[100]/50 中,其中包含先前计算的平均值。

** 编辑:问题解决了!!short一旦我更改了数组类型,我就得到了正确的值!感谢所有花时间回答我的问题的人也感谢向我介绍containers**

这是我的代码:

#include <iostream>

#include "const.h"
#include "data.h"
#include "SortEngine.h"
#include "test.h"
#include "fonction.h"
//example of how data is defined data 2darray[pixels = 10][sensors = 3]






      /* unsigned short 2darray{{ 10025 , 10192 , 10028 , 10129 , 10199 , 9843 , 9823 , 9857 , 9996 , 9873},
    {10081 , 10122 , 9853 , 10060 , 10027 , 10165 , 10154 , 9853 , 9877, 9816},
    {9845 , 9876 , 9954 , 9836 , 9876 , 10035 , 10094 , 9946 , 10195 

, 10080}} */


    void moyenne(unsigned short average[pixels])
{
    unsigned short transtab[pixels][sensors];
    unsigned short E[pixels];
    unsigned int i,k, count;

    Acquisition(0, transtab);// function to get the data from data.cpp


    for(i=0; i<pixels; i++)
    {
        E[i] = 0;
        average[i] = 0;
        count = 0;

        for(k=0; k<sensors; k++)
        {
            E[i] = E[i] + transtab[i][k];

            count++;
        }
        if(count != 0){
        average[i] = E[i]/count;
        }
        cout << average[i] << endl;

        }

    }

我已经坚持了两天,因为我没有看到问题。任何帮助,将不胜感激。谢谢你。

注意:average[0] = 10029 的预期值,而我使用代码获得的值:853(通常,代码应将 transtab[0][k](其中 k<50)的所有元素相加,其中平均值为这个总和)

标签: c++

解决方案


问题似乎是您正在计算空数组值。随着您的代码计数始终等于传感器。您必须首先检查是否 transtab[i][k] != 0

for(k=0; k<sensors; k++)
{
  if (transtab[i][k] != 0) {
    E[i] = E[i] + transtab[i][k];
    count++;
  }
}

推荐阅读