在 Javascript 中乘以 2 个矩阵 [英] Multiply 2 matrices in Javascript
问题描述
我正在做一个乘以 2 个矩阵的函数.矩阵将始终具有相同的行数和列数.(2x2, 5x5, 23x23, ...)
I'm doing a function that multiplies 2 matrices. The matrices will always have the same number of rows and columns. (2x2, 5x5, 23x23, ...)
当我打印它时,它不起作用.为什么?
When I print it, it doesn't work. Why?
例如,如果我创建两个 2x2 矩阵:
For example, if I create two 2x2 matrices:
矩阵A:
[1][2]
[3][4]
矩阵B:
[5][6]
[7][8]
结果应该是:
[19][22]
[43][50]
(http://ncalculators.com/matrix/2x2-matrix-multiplication-calculator.htm)
但是,我明白了:
[19][undefined]
[22][indefined]
function multiplyMatrix(matrixA, matrixB)
{
var result = new Array();//declare an array
//var numColsRows=$("#matrixRC").val();
numColsRows=2;
//iterating through first matrix rows
for (var i = 0; i < numColsRows; i++)
{
//iterating through second matrix columns
for (var j = 0; j < numColsRows; j++)
{
var matrixRow = new Array();//declare an array
var rrr = new Array();
var resu = new Array();
//calculating sum of pairwise products
for (var k = 0; k < numColsRows; k++)
{
rrr.push(parseInt(matrixA[i][k])*parseInt(matrixB[k][j]));
}//for 3
resu.push(parseInt(rrr[i])+parseInt(rrr[i+1]));
result.push(resu);
//result.push(matrixRow);
}//for 2
}//for 1
return result;
}// function multiplyMatrix
推荐答案
您对各种临时数组感到困惑.undefined
值是由最内层循环下方行的越界访问引起的.
You're getting confused with your various temporary arrays. The undefined
values are caused by out-of-bounds access on the line below your innermost loop.
我建议您坚持为乘法结果创建一个数组.您可能知道,问题在于 JavaScript 不允许您初始化多维数组.要创建一个二维数组,您必须初始化一个一维数组,然后迭代它的元素并将每个元素初始化为一个一维数组.
I recommend that you stick to making a single array for the result of the multiplication. As you're probably aware, the hitch is that JavaScript doesn't allow you to initialize a multi-dimensional array. To make a two-dimensional array, you have to initialize a one-dimensional array, then iterate over its elements and initialize each one to a one-dimensional array.
function multiply(a, b) {
var aNumRows = a.length, aNumCols = a[0].length,
bNumRows = b.length, bNumCols = b[0].length,
m = new Array(aNumRows); // initialize array of rows
for (var r = 0; r < aNumRows; ++r) {
m[r] = new Array(bNumCols); // initialize the current row
for (var c = 0; c < bNumCols; ++c) {
m[r][c] = 0; // initialize the current cell
for (var i = 0; i < aNumCols; ++i) {
m[r][c] += a[r][i] * b[i][c];
}
}
}
return m;
}
function display(m) {
for (var r = 0; r < m.length; ++r) {
document.write(' '+m[r].join(' ')+'<br />');
}
}
var a = [[8, 3], [2, 4], [3, 6]],
b = [[1, 2, 3], [4, 6, 8]];
document.write('matrix a:<br />');
display(a);
document.write('matrix b:<br />');
display(b);
document.write('a * b =<br />');
display(multiply(a, b));
这篇关于在 Javascript 中乘以 2 个矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!