在 Javascript 中乘以 2 个矩阵

新手上路,请多包涵

我正在做一个将 2 个矩阵相乘的函数。

矩阵将始终具有相同的行数和列数。 (2x2, 5x5, 23x23, …)

当我打印它时,它不起作用。为什么?

例如,如果我创建两个 2x2 矩阵:

矩阵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

原文由 Jordi 45454 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 338
2 个回答

您对各种临时数组感到困惑。 undefined 值是由最内层循环下方的行上的越界访问引起的。

我建议您坚持为乘法结果制作一个数组。您可能已经知道,问题在于 JavaScript 不允许您初始化多维数组。要制作二维数组,您必须初始化一个一维数组,然后遍历其元素并将每个元素初始化为一维数组。

 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('&nbsp;&nbsp;'+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));

原文由 Michael Laszlo 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用来自以下网址的 multiplyMatrices() 函数: http ://tech.pro/tutorial/1527/matrix-multiplication-in-functional-javascript 它就像魅力一样。示例(您可以使用 console.table() 在 Chrome 和 Firefox 控制台中打印带有样式的矩阵):

 function multiplyMatrices(m1, m2) {
    var result = [];
    for (var i = 0; i < m1.length; i++) {
        result[i] = [];
        for (var j = 0; j < m2[0].length; j++) {
            var sum = 0;
            for (var k = 0; k < m1[0].length; k++) {
                sum += m1[i][k] * m2[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}

var m1 = [[1,2],[3,4]]
var m2 = [[5,6],[7,8]]

var mResult = multiplyMatrices(m1, m2)

/*In Google Chrome and Firefox you can do:*/

console.table(mResult) /* it shows the matrix in a table */

console.table() 中的结果矩阵

原文由 Johann Echavarria 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题