如何将多维数组转置到位

时间:2010-04-21 06:21:20

标签: algorithm multidimensional-array

如何将2D矩阵转置到位?

8 个答案:

答案 0 :(得分:7)

维基百科有一篇文章就地矩阵换位。本文涵盖非方形矩阵。

http://en.wikipedia.org/wiki/In-place_matrix_transposition

答案 1 :(得分:6)

for (int i=0; i<n; i++) {
  for (int j=0; j<i; j++) {
    temp = a[i][j];
    a[i][j] = a[j][i];
    a[j][i] = temp;
  }
}

答案 2 :(得分:4)

您尚未指定语言,但通常您所做的是:

let a be your array.
for each i,j with i<j switch a[i,j] with a[j,i]

答案 3 :(得分:2)

要获得方形矩阵的转置,我们需要考虑主对角线上方或下方的元素,并将每个元素与主对角线的反射交换:

for i->0 to N-1
 for j->i+1 to N-1
  swap matrix[i][j] with matrix[j][i]

答案 4 :(得分:1)

for(i=0;i<N;i++)
  for(j=0;j<N;j++)
    if(i!=j && j>i)
      {
        temp=a[i][j];
        a[i][j]=a[j][i];
        a[j][i]=temp;
      }  

N是数组的大小)

答案 5 :(得分:0)

为什么要这么麻烦?只需在任何访问语句中交换索引。

答案 6 :(得分:0)

在c#

string[,] Value;
//fill Value

//create transposed array
ValueAux = new string[Value.GetLength(1),Value.GetLength(0)];
for (i = 0; i < Value.GetLength(0); i++)
{
  for (j = 0; j < Value.GetLength(1); j++)
  {
    Valueaux[j, i] = Value[i, j];
  }
}

结果在ValueAux

答案 7 :(得分:-1)

这似乎运作良好:

function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}