我试图将1D矩阵乘以C中的2D矩阵。 以下是我使用2D循环得到的结果的一个示例: (+应该是*我错过打字)
所以我得到一个值为
的矩阵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阵列的代码:
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 :(得分: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];
}
}
}
}