C ++乘以2个ND矩阵

时间:2011-04-16 10:28:09

标签: c++

棘手的问题,如何乘以2个ND矩阵?当然columnsA == rowsB ... 这就是我所拥有的:

void multiply(int *A, int *B, int r1, int c1, int r2, int c2) {
     int sum = 0;
     for (int i=0;i<(c1*r2);i++) {
         for (int j=0;j<c1;j++) {
             sum += A[(i-i%c1)+j] * B[(i%c1)+j*c1];
         }
         cout << sum << " ";
         sum = 0;
    }
}

致电:

multiply(&A[0][0],&B[0][0],rowsA,columnsA,rowsB,columnsB);

显然只适用于矩形矩阵。有什么建议吗? :)

2 个答案:

答案 0 :(得分:0)

我建议您使用专用库,例如​​Click

Click

答案 1 :(得分:0)

另一个建议,为了使其防错,请使用以下技术:

编写模板包装器,例如,

template<typename TYPE, size_t ROW_A, size_t COL_A, size_t COL_B>
void multiply (TYPE (&A)[ROW_A][COL_A], TYPE (&B)[COL_A][COL_B])
{
  mulitply(&A[0][0], &B[0],[0], ROW_A, COL_A, COL_B, COL_B);
}

有两个优点:

  1. 您不必为代码中的两个数组手动传递行/列索引
  2. 如果(A的列!= B的行)
  3. ,将在编译时捕获错误/错误