javascript - 矩阵乘法:四个循环与三个循环
问题描述
虽然我的代码运行没有错误,但我得到的矩阵(即 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);
推荐阅读
- r - 尝试确定使用“rtweet”的大型 Twitter API 查询是否仍在实际下载
- magma - 为什么 Magma 2.5 不可编译?
- c++ - 显式重载没有运气
- javascript - 如何从一个数组中选择对象成为单独数组中的对象
- python - pytest-mocks 并声明一个类级别的夹具
- vector - 当我不使用运算符时,如何修复 Octave 中的不一致参数错误?
- java - Java 小程序不能在 AdoptOpenJDK 中运行
- c - 如何使用 sscanf 读取一行带有 continue 逗号的 csv
- aframe - 如何在 A-Frame 中检测相机和球体的距离
- python - 如何将我的代码返回到代码的开头?