矩阵乘法:四循环与三循环

Matrix Multiplication: Four Loops vs Three Loops

虽然我的代码 运行 没有错误,但我的结果矩阵(即 C)不正确。 C应该是什么:[6, 20, 3, 5],[-3, 3,-2, 0],[30, 27, 5, 12],[9, 13, 8, 4].

根据我的代码,C 目前是什么:[35,45,25,15],[14,18,10,6],[-14,-18,-10,-6],[ 14,18,10,6]

我感觉这是因为我的循环与结果矩阵不匹配,但我似乎无法弄清楚这个问题。

我还注意到该论坛上的其他矩阵乘法线程使用 3 个循环,而不是我的 4 个循环。如果这是我错误的原因,你能解释一下原因吗? 2 个单独的行和 2 个单独的列不应该有一个迭代吗?

const A = [  [-4,0,5],
            [-3,-1,2],
            [6,7,-2],
            [1, 1, 2]
         ];

const B = [ [1, 0, 3, 0],
            [4,5,-1, 2],
            [2, 4, 3, 1]
         ];

C = [];

for (var i =0; i< A.length; i++){
    C[i] = [];
    for (var j =0 ; j< A[j].length; j++){
        //console.log(A[i][j]);
        for (var y = 0 ; y < B[0].length ; y++){
                C[i][y] = 0;
            for (var x = 0 ; x < B.length ; x++){
                //console.log(B[x][y]+ "["+x+","+y+"]");
                //console.log(C[i][y]+ "["+i+","+y+"]"); 
                C[i][y] += A[i][j] * B[x][y];
            }
            console.log(C[i][y] + "[" + i + "," +y+"] is the resultant matrix");
        }
    }
}
console.log(JSON.stringify(C)); //to print out resultant matrix in array format

您不需要使用四个循环。你只需要三个循环就是问题所在。用于问题的嵌套循环数不是您的选择。

这道题只需要三个嵌套循环。矩阵相乘。我们将第一个矩阵的每一行的每个元素与第二个矩阵的每一列的 对应的 元素相乘。

现在你需要了解的是第三个嵌套循环将生成-4,0,5。此时我们不需要另一个循环,因为我们将它们添加到相应的值。并非每个值都添加到所有值。

const A = [  [-4,0,5],
            [-3,-1,2],
            [6,7,-2],
            [1, 1, 2]
         ];

const B = [ [1, 0, 3, 0],
            [4,5,-1, 2],
            [2, 4, 3, 1]
         ];
const C = [];

for(let i = 0; i < A.length; i++){
  C[i] = []
  for(let j = 0; j < B[0].length; j++){
    C[i][j] = 0
    for(let k = 0; k < A[0].length; k++){    
      C[i][j] += A[i][k] * B[k][j];
    }  
  }
  
}
//[6, 20, 3, 5],[-3, 3,-2, 0],[30, 27, 5, 12],[9, 13, 8, 4]
console.log(C);