【问题标题】:2D Array Average - Convolution - C Program2D Array Average - 卷积 - C 程序
【发布时间】:2022-11-18 17:37:25
【问题描述】:

我的程序需要帮助。我需要它来计算 3x3 平均值,然后去计算下一个。这是我到目前为止得到的

int main(void){
    float in_sum = 0;
    float *in_matrix[ROWS][COLS];
    float in_avg;

    float matr[ROWS][COLS]={{1.5, 5, 6, 12, 13, 7, 80},
                            {50, 6.5, 23, 77, 17, 8.5, 28},
                            {43.5, 78, 8, 9, 34.5, 10, 95},
                            {75, 44, 40, 29, 39, 5, 99.5},
                            {18, 86, 68, 92, 10.5, 11, 4}};

    printf("Matrix Input:\n");

        for(int i = 0; i < ROWS; i++){
            for (int j = 0; j < COLS; j++){
                printf("%.2f ", matr[i][j]);
                    if(j==6){
                        printf("\n");
                    }
            }
        }
        printf("\nMatrix Output: \n");
        int j = 0, nr = 3, nc = 3;
        for (int i = 0; i < nr; i++){
            for(j = 0; j < nc; j++){
                in_sum = in_sum + matr[i][j];
            }
        }
        in_avg = in_sum/(ROWS*COLS);
        for (int i=0; i< ROWS; i++){
            for (int j=0; j< COLS; j++){
            printf("%.2f", in_avg);
            }
            printf("\n");
        }
        in_matrix[ROWS][COLS] = &in_sum;
    return 0;
}

【问题讨论】:

  • 描述照片在链接上
  • 在一个不相关的注释中,而不是if (j == 6) { printf("\n"); },只是将换行符的打印放在内部循环之外。喜欢for (int j = 0; j &lt; COLS; j++) { ... } printf("\n");
  • 欢迎来到堆栈溢出!目前尚不清楚您的问题到底是什么。代码没有做它应该做的事吗?怎么会这样?你试过什么让它工作?你卡在哪儿了?
  • 代码无法编译,因为它缺少 ROWS、COLS 和 #includes 的定义。图表与数据甚至维度不匹配。
  • 您声明了 float *in_matrix[ROWS][COLS]; 但随后使用 in_matrix[ROWS][COLS] = &amp;in_sum; 越界访问了它

标签: arrays c 2d average convolution


【解决方案1】:

您共享的代码甚至无法正常工作。尝试这个:

#include <stdio.h>

#define OVER 3

float sum(size_t cols, float *matrix) {
    float s = 0;
    for(size_t row = 0; row < OVER; row++) {
        for(size_t col = 0; col < OVER; col++) {
            s += matrix[row * cols + col];
        }
    }
    return s / (OVER * OVER);
}

int main(void) {
    float matrix[][7] = {
        {1.5, 5, 6, 12, 13, 7, 80},
        {50, 6.5, 23, 77, 17, 8.5, 28},
        {43.5, 78, 8, 9, 34.5, 10, 95},
        {75, 44, 40, 29, 39, 5, 99.5},
        {18, 86, 68, 92, 10.5, 11, 4}
    };
    size_t rows = sizeof matrix /sizeof matrix[0];
    size_t cols = sizeof matrix[0] / sizeof matrix[0][0];
    for(size_t row=0; row < rows - OVER + 1; row++) {
        for(size_t col=0; col < cols - OVER + 1; col++) {
            printf("%.1f%c",
                sum(cols, &matrix[row][col]),
                col + 1 < cols - OVER + 1 ? ' ' : '
'
            );
        }
    }
}

和示例运行:

24.6 24.9 22.2 20.9 32.6
40.9 34.9 30.7 25.4 37.4
51.2 50.4 36.7 26.7 34.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多