首页 > 解决方案 > 矩阵乘法:四个循环与三个循环

问题描述

虽然我的代码运行没有错误,但我得到的矩阵(即 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

标签: javascriptmultidimensional-arraynested-loopsmatrix-multiplication

解决方案


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

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

现在您需要了解的是第三个嵌套循环将生成-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);


推荐阅读