【发布时间】: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。将其放入目标数组中“左上角”的坐标处。
-
查找卷积。
标签: arrays c function pointers matrix