c++ - 计算一维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)的所有元素相加,其中平均值为这个总和)
解决方案
问题似乎是您正在计算空数组值。随着您的代码计数始终等于传感器。您必须首先检查是否 transtab[i][k] != 0
for(k=0; k<sensors; k++)
{
if (transtab[i][k] != 0) {
E[i] = E[i] + transtab[i][k];
count++;
}
}