[爆卦]轉置矩陣c語言是什麼?優點缺點精華區懶人包

為什麼這篇轉置矩陣c語言鄉民發文收入到精華區:因為在轉置矩陣c語言這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者artorius (嵐)看板C_and_CPP標題[問題] 急! MXN矩陣 作轉置使用c或c+...


開發平台(Platform): (Ex: VC++, GCC, Linux, ...)

c or c++


問題(Question):
example:
把5x5矩陣使用快速轉置矩陣演算法做轉換

餵入的資料(Input):

1 <--- 矩陣個數
5 <--- row個數
5 <--- col個數
0 0 4 0 1
0 1 0 3 0
0 0 0 0 2
2 3 0 1 0
5 0 4 0 0


預期的正確結果(Expected Output):
Sparse matrix:
row col value
0 5  5  10
1 0  3  4
2 0 4 1
3 1 1 1
4 1 3 3
5 2 4 2
6 3 0 2
7 3 1 3
8 3 3 1
9 4 0 5
10 4 2 4
--------------------------------
0 1 2 3 4
RowTerms 2 2 1 3 2
startingPos 1 3 5 6 9
-------------------------------
Transpose matrix:
row col value
0 5 5 10
1 0 3 2
2 0 4 5
3 1 1 1
4 1 3 3
5 2 4 4
6 3 0 4
7 3 1 3
8 3 3 1
9 4 0 1
10 4 2 2
----------------------------


錯誤結果(Wrong Output):


程式碼(Code):(請善用置底文網頁, 記得排版)

快速轉置矩陣程式碼

void fast_transpose(term a[ ], term b[ ])
{
int row_terms[MAX_COL], starting_pos[MAX_COL];
int i, j, num_cols = a[0].col, num_terms = a[0].value;
b[0].row = num_cols; b[0].col = a[0].row;
b[0].value = num_terms;
if (num_terms > 0)
{
for (i = 0; i < num_cols; i++)
row_terms[i] = 0;
for (i = 1; i <= num_terms; i++)
row_term [a[i].col]++;
starting_pos[0] = 1;
for (i =1; i < num_cols; i++)
starting_pos[i]=starting_pos[i-1] +row_terms [i-1];
// cout << row_terms [i-1];
// cout << starting_pos[i]];
for (i=1; i <= num_terms, i++)
{
j = starting_pos[a[i].col];
b[j].row = a[i].col;
b[j].col = a[i].row;
b[j].value = a[i].value;
startingPos[a[i].col]++;
// cout << a[i].col << a[i].row << a[i].value;
}

}
}


補充說明(Supplement):

由於是大二作業,不得不交,已請教多位高手

仍無法獲得解決,懇請版上高手幫忙

現在方向要先定義資料結構,在讀5X5矩陣作轉換,題目改成只有5x5,就單純範例去跑就好

感覺難度有降低一點,不過卡在讀檔QQ

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.237.163.36
※ 編輯: artorius 來自: 36.237.163.36 (10/21 00:09)
ykjiang:現在 google 那麼方便,這種典型的問題就去股一下吧 10/21 01:39
acess23:課本應該有範例程式碼吧 10/21 01:40
EdisonX:我看不出有什麼「快速」的秘密在裡面說.有人可幫忙解釋 ?? 10/21 02:16
linotwo:你可以用一個 stable sorting 演算法,依據每個 term 的 10/21 03:10
linotwo:col 值排一遍,再從頭依序把 row 跟 col 值交換,同時算出 10/21 03:12
linotwo:row terms 跟 starting position 的資訊。 10/21 03:13
LPH66:>EdisonX 因為這是用在稀疏矩陣的轉置 直接做的話是n^2 10/21 09:30
SocketAM2:直接使用opencv之類的工具,矩陣要轉置、乘積什麼之類都 10/21 10:47
SocketAM2:不是問題 10/21 10:47
diabloevagto:http://eigen.tuxfamily.org/ 能用lib就用這個 10/21 10:57
EdisonX:謝謝 LPH66, 我似乎看懂了..確認一下效能是 O(nlogn)*2 ?? 10/21 16:35
EdisonX:( 更正一下,是 O(nlogn) ?? ) 10/21 16:36
※ 編輯: artorius 來自: 36.237.163.36 (10/21 16:51)
loveme00835:這不就是課本的程式碼? 一點努力都沒有? 10/21 22:24
x000032001:XD 這不就仿的饅頭of資結裡面的code 課本code要看懂阿~ 10/22 20:22

你可能也想看看

搜尋相關網站