2010-04-21 109 views
6

如何轉置2D矩陣到位?Howto轉置多維陣列

+3

是否正方? 它會產生很大的差異 – Anycorn 2010-04-21 06:34:52

+1

@aaa:移置一個非方形矩陣並沒有多大意義。 – Jens 2010-04-21 07:29:37

+2

儘管取決於表示(例如使用單個N * M維數組),但可以完成。 – 2010-04-21 13:52:28

回答

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

警告!這隻適用於方陣。請參閱下面的@ dlb維基百科鏈接,瞭解非方形矩陣實現。 – Mayank 2014-04-07 06:04:56

4

您還沒有指定一個語言,但通常你做的是:

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

爲了得到一個方陣,我們需要考慮上面的主對角線或低於它的元素的轉置和沿着主對角線互相交換:

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

爲什麼要麻煩?只需在任何訪問聲明中交換索引。

+9

以「錯誤」順序訪問2D數組會出現嚴重的性能損失 - 通常爲了獲得連續內存訪問(單位跨度)的好處而付出轉置費用通常會更好。 – 2010-04-21 07:29:22

-1

這似乎很好地工作:

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

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

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是你陣列的大小)