Javascript对角矩阵

时间:2017-03-08 19:36:32

标签: javascript matrix multidimensional-array

我需要在JS中做一个简单的对角矩阵,它应该像这样:

[
  [4, 7, 9],
  [2, 5, 8],
  [1, 3, 6]
]

我的想法是使用一个二维数组和两个循环,但我得到的结果是一个空数组。您将在下面看到我的代码看起来像什么,但显然我的值有问题。



function fillMatrix(n) {
  var matrix = [];
  var rows = 0;
  var cols = 0;
  var startCount = 1;

  for (var i = (n - 1); i >= 0; i--) {
    rows = i;
    cols = 0;
    matrix[rows] = [];
    while (rows < n && cols < n) {

      matrix[rows++][cols++] = startCount++;
    }


    for (var j = 0; j < n; j++) {
      rows = j;
      cols = 0;
      matrix[rows] = [];
      while (rows < n && cols < n) {
        matrix[cols++][cols++] = startCount++;
      }
    }
  }
  return matrix;
}

n = +prompt();
console.log(fillMatrix(n));
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

如果查看行之间的模式,可以大大简化创建对角矩阵的逻辑。 (我在这里没有完成所有的数学考试,但是在评论中可以随意问我关于你发现令人困惑的任何特定部分的问题。)

例如,采用4x4对角矩阵:

连续元素之间的连续差异构成了下面的模式:

我可能仍在努力缩短下面的方法,但现在它起作用并且相当简洁。

演示:

&#13;
&#13;
function diagonalMatrix (n) {
  var matrix = [], row
  for (var i = n; i > 0; i--) {
    var x = i*(i-1)/2 + 1, dx = i
    matrix.push(row = [])
    for (var j = n; j > 0; j--) {
      row.push(x)
      x += (i < j ? ++dx : dx--)
    }
  }
  return matrix
}

var matrix = diagonalMatrix(+prompt('Diagonal Matrix Order:'))

console.log(beautify(matrix))
console.log(matrix)



// For visualization purposes
function beautify (matrix) {
  return matrix.map(function (e) {
    return e.join('\t')
  }).join('\n\n\n\n')
}
&#13;
.as-console-wrapper { min-height: 100vh; }
&#13;
&#13;
&#13;