我不確定這個問題是否已被要求 或很可能已經回答。如果我開始 原來的3x3矩陣:對角線反映矩陣
1 2 3 4 5 6 7 8 9
,我怎麼會產生以下3x3矩陣:
9 6 3 8 5 2 7 4 1
?
我不確定這個問題是否已被要求 或很可能已經回答。如果我開始 原來的3x3矩陣:對角線反映矩陣
1 2 3 4 5 6 7 8 9
,我怎麼會產生以下3x3矩陣:
9 6 3 8 5 2 7 4 1
?
既然你想反映關於次對角線(這不是換位),這裏的代碼,彼得稍加修改的副本:
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
int temp = a[i][j];
a[i][j] = a[n - 1 - j][n - 1 - i];
a[n - 1 - j][n - 1 - i] = temp;
}
}
非常感謝;因爲我正在使用計算機而不是手工創建一個13x13 Ramsey Number R(4,4)計數器示例,所以我轉置了次對角線;我需要反思它,所以我的測試算法會查出產生不良的矩陣。謝謝! – 2011-05-06 21:06:18
如果這回答您的問題,請單擊答案旁邊的複選標記。這被稱爲「接受答案」,這就是我們在StackOverflow中如何說「謝謝」。哦,歡迎來到SO。 – 2011-05-06 21:08:13
@ Steve314:你說得對。對不起,搞砸了。 – 2011-05-06 21:38:56
對於反射,在矩陣對項目是交換,因此「做某事」(在循環內)將是交換操作。循環將用於選擇要交換的項目,並且使用一些基本的算術來選擇要交換的項目。循環應該遍歷軸的一側反射的物體三角形,不包括反射軸和反射軸的另一側。要想象...
0 1 2
0 * */
1 */.
2/. .
星號是用作交換的第一個參數的項目。這些點是用作交換的第二個參數的項目。斜槓在反射軸上。
因此...
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < (n-1)-i; j++) // Thanks to Bugaboo for bugfix
{
std::swap (a[i][j], a[2-j][2-i]);
}
}
隨着3x3矩陣,該循環是有點過分 - 他們都在這裏顯示爲原則,並說明如何擴展它。只有三個星號在可視化,並且只有三個交換操作需要...
std::swap (a[0][0], a[2][2]);
std::swap (a[0][1], a[1][2]);
std::swap (a[1][0], a[2][1]);
對於N * N方陣:
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1-i;j++) //Swap elements above anti-diagonal
std::swap(mat[i][j],mat[n-1-j][n-1-i]); //with elements below it
我想我找到了一種方法在MATLAB是結合了一系列其他現有的翻轉方法。
Ham
是目標則代碼如下。
也許這是錯的,但讓我知道。
fliplr(fliplr(Ham)')
您的意思是矩陣轉置? (如果是這樣,那麼我的答案就是這樣)你說對角線保持不變,但你的例子顯示不然。 – Pepe 2011-05-06 20:50:31
主對角線是從左上角到右下角的對角線。圍繞主對角線的「反射」稱爲_transposing_矩陣。您反映的對角線(從左下角到右上角)被稱爲_antidiagonal_或_secondary對角線_。 – 2011-05-06 20:50:38