C中的多维数组3x3平均值
Posted
技术标签:
【中文标题】C中的多维数组3x3平均值【英文标题】:Multidimensional Array 3x3 Average in C 【发布时间】:2022-01-09 07:57:13 【问题描述】:我被我的 C 程序困住了,我必须通过一个函数来计算多维数组的平均值。
假设您有以下数组:
array[5][8];
我已经能够通过函数计算整个数组的平均值。 但是,在练习中,您必须计算 5x8 数组内的 3x3 维数组的平均值,并且必须将结果写入另一个数组。
它应该看起来像这样(意味着 3x3 矩阵可以重叠):
这就是我的函数到目前为止的样子(它只是计算整个矩阵的总和)。用户可以决定数组的大小和值。
void matavg(float *matrixIn, float *matrixOut, int rows, int cols, float *avg)
float sum = 0;
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
sum += *(matrixIn+i * cols+j);
*avg = sum /(rows*cols);
如何重写我的函数,以便在输入数组内连续计算 3x3 元素的平均值?
*matrixIn
是用户创建的矩阵; *matrixOut
应该是具有平均值的矩阵。
【问题讨论】:
对于每个目标元素,将源数组中对应的 3×3 元素的值相加,然后除以 9。 获取每个可能的 3x3 矩阵左上角的坐标。迭代所有这些坐标,这意味着迭代整个矩阵的两侧减去 2。现在在两个单独的(嵌套)循环中,对于每个“左上角”,x 和 y 坐标都从 0 迭代到 2(然后添加到“左上角”的坐标。将所有数字相加并除以 9。将其放入目标数组中“左上角”的坐标处。 查找卷积。 【参考方案1】://sq - size of the square subarray.
void matavg3x3(size_t rows, size_t cols, size_t sq, float (*matrixIn)[cols], float (*matrixOut)[sq])
for(size_t rowstart = 0; rowstart <= rows - sq; rowstart++)
for(size_t colstart = 0; colstart <= cols - sq; colstart++)
double sum = 0.0;
for(size_t row = 0; row < sq; row++)
for(size_t col = 0; col < sq; col++)
sum += matrixIn[rowstart + row][colstart + col];
matrixOut[rowstart][colstart] = sum / (sq * sq);
【讨论】:
float *matrixOut
结合 matrixOut[rowstart][colstart]
看起来像是编译错误
@tstanisl 确实忘了修改第一行以上是关于C中的多维数组3x3平均值的主要内容,如果未能解决你的问题,请参考以下文章