Как транспонировать многомерный массив на месте - PullRequest
6 голосов
/ 21 апреля 2010

как транспонировать 2D матрицу на месте?

Ответы [ 8 ]

7 голосов
/ 22 апреля 2010

В Википедии была статья Транспонирование матрицы на месте.В статье рассматриваются неквадратные матрицы.

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

6 голосов
/ 21 апреля 2010
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;
  }
}
4 голосов
/ 21 апреля 2010

Вы не указали язык, но обычно вы делаете:

let a be your array.
for each i,j with i<j switch a[i,j] with a[j,i]
2 голосов
/ 21 апреля 2010

Чтобы получить транспонирование квадратной матрицы, нам нужно рассмотреть элементы выше главной диагонали или под ней и поменять местами каждый с его отражением вдоль главной диагонали:

for i->0 to N-1
 for j->i+1 to N-1
  swap matrix[i][j] with matrix[j][i]
1 голос
/ 07 мая 2015
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 - размер вашего массива)

0 голосов
/ 23 августа 2013

в 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

0 голосов
/ 27 апреля 2013

Кажется, это хорошо работает:

function transpose(a)
{
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
0 голосов
/ 21 апреля 2010

Зачем беспокоиться? Просто поменяйте местами индексы в любом операторе доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...