как транспонировать 2D матрицу на месте?
В Википедии была статья Транспонирование матрицы на месте.В статье рассматриваются неквадратные матрицы.
http://en.wikipedia.org/wiki/In-place_matrix_transposition
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; } }
Вы не указали язык, но обычно вы делаете:
let a be your array. for each i,j with i<j switch a[i,j] with a[j,i]
Чтобы получить транспонирование квадратной матрицы, нам нужно рассмотреть элементы выше главной диагонали или под ней и поменять местами каждый с его отражением вдоль главной диагонали:
for i->0 to N-1 for j->i+1 to N-1 swap matrix[i][j] with matrix[j][i]
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 - размер вашего массива)
N
в 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
Кажется, это хорошо работает:
function transpose(a) { return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); }); }
Зачем беспокоиться? Просто поменяйте местами индексы в любом операторе доступа.