javascript - 在 Javascript 中乘以 2 个矩阵

标签 javascript arrays matrix matrix-multiplication

我正在做一个将 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

最佳答案

您对各种临时数组感到困惑。 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));

关于javascript - 在 Javascript 中乘以 2 个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205018/

相关文章:

Javascript 数组只显示最后一个子元素

MATLAB 连接维度不等的矩阵

r - 按元素排列的矩阵列表的平均值

javascript - 等待 aysnc 调用每个

javascript - Express 中间件中丢失 ajax 数据

javascript - Material UI 图标无法正确渲染

javascript - 使用 angularjs 渲染星级评分系统

php - 使用关联数组作为 php 函数的输入

javascript - 搜索数组时出现问题

math - 在 Julia 中有效地向矩阵添加标量