2017-03-12 241 views
-2

我想将一维矩阵乘以C中的二维矩阵。 下面是我用2D循环得到的结果的一个示例: (该+应该是一个* I未命中类型)乘以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

这里是对于一维数组代码:

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}

+0

评论是不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/137934/discussion-on-question-by-r-nbkd-multiplying-1d-matrixes-like-2d-matrixes)。 –

回答

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]; 
      } 
     } 
    } 
} 
+0

所以你正在解释的问题是将矩阵存储在一维数组而不是二维数组中? –

+0

是的。这是我从所提供的细节中收集的。他们想要在1-D数组而不是2-d操作时获得相同的答案。 –

+0

@BijayGurung是这就是我想要的,但是用你写的这个循环,我没有得到结果'{2,3,6,11}',而是'{56,62,68,74}' –