将二维矩阵乘以一维矩阵

时间:2017-03-12 17:08:16

标签: c arrays loops

我试图将1D矩阵乘以C中的2D矩阵。 以下是我使用2D循环得到的结果的一个示例: (+应该是*我错过打字)

2D matrix multiplication

所以我得到一个值为

的矩阵C.
{
{2,3},
{6,11}
};

以下是C:中的2D数组的代码:

void multiply(int n, double ** a, double ** b, double ** c) {
int i, j, k;
for (i = 1; i < n; i++){
    for (j = 1; j < n; j++){
        for (k = 1; k < n; k++){
            c[i][j] += a[i][k] * b[k][j];   
        }
      }
    }
}

现在,我正在尝试做同样的事情,但对于一维矩阵,如图所示: (+应该是*我错过打字)

1D matrix multiplication

以下是1D阵列的代码:

void multiply(int n, double * a, double * b, double * c) {

int i, j, k;

for (i = 0; i < n*n; i++) {
    for (j = 0; j < n*n; j++) {
        for (k = 0; k < n*n; k++) {
            c[i]+= a[j]*b[k];
        }
      }
    }
}

运行后,我得到结果{14400, 14400,14400,14400}而不是{2,3,6,11}

1 个答案:

答案 0 :(得分:2)

看起来你只想在使用一维数组而不是二维数时进行矩阵乘法。不知道你为什么要这样做,但你可以做这样的事情:

void multiply(int n, double *a, double *b, double *c) {

    int i, j, k;

    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            for (k = 0; k < n; k++) {
                c[i * n + j] += a[i * n + k] * b[k * n + j];   
            }   
        }
    }   
}