为了账号安全,请及时绑定邮箱和手机立即绑定

在javascript中交换矩阵的列(换位)

在javascript中交换矩阵的列(换位)

jeck猫 2019-09-03 16:50:37
例如,我有一个像这样的矩阵:|1 2 3|    |4 5 6||7 8 9|我需要它转换成这样的矩阵:|1 4 7|    |2 5 8||3 6 9|实现这一目标的最佳和最佳方式是什么?
查看完整描述

3 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

参见文章:在JavaScript和jQuery中转置数组


function transpose(a) {


  // Calculate the width and height of the Array

  var w = a.length || 0;

  var h = a[0] instanceof Array ? a[0].length : 0;


  // In case it is a zero matrix, no transpose routine needed.

  if(h === 0 || w === 0) { return []; }


  /**

   * @var {Number} i Counter

   * @var {Number} j Counter

   * @var {Array} t Transposed data is stored in this array.

   */

  var i, j, t = [];


  // Loop through every item in the outer array (height)

  for(i=0; i<h; i++) {


    // Insert a new row (array)

    t[i] = [];


    // Loop through every item per item in outer array (width)

    for(j=0; j<w; j++) {


      // Save transposed data.

      t[i][j] = a[j][i];

    }

  }


  return t;

}


console.log(transpose([[1,2,3],[4,5,6],[7,8,9]]));


查看完整回答
反对 回复 2019-09-03
?
波斯汪

TA贡献1811条经验 获得超4个赞

DuckDucking打开了这个由肯。令人惊讶的是,它比尼基塔的答案更加简洁和完整。它在内核中隐式检索列和行长度map()。


function transpose(a) {

    return Object.keys(a[0]).map(function(c) {

        return a.map(function(r) { return r[c]; });

    });

}


console.log(transpose([

    [1,2,3],

    [4,5,6],

    [7,8,9]

]));


查看完整回答
反对 回复 2019-09-03
?
潇湘沐

TA贡献1816条经验 获得超6个赞

就像任何其他语言一样:


int[][] copy = new int[columns][rows];

for (int i = 0; i < rows; ++i) {

    for (int j = 0; j < columns; ++j) {

        copy[j][i] = original[i][j];

    }

}

您只需在JS中以不同方式构造2D数组。像这样:


function transpose(original) {

    var copy = [];

    for (var i = 0; i < original.length; ++i) {

        for (var j = 0; j < original[i].length; ++j) {

            // skip undefined values to preserve sparse array

            if (original[i][j] === undefined) continue;

            // create row if it doesn't exist yet

            if (copy[j] === undefined) copy[j] = [];

            // swap the x and y coords for the copy

            copy[j][i] = original[i][j];

        }

    }

    return copy;

}


console.log(transpose([

    [1,2,3],

    [4,5,6],

    [7,8,9]

]));


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 393 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号