Re: [問題] 切割矩陣

看板MATLAB作者 (神無月 孝臣)時間18年前 (2006/10/29 01:56), 編輯推噓6(600)
留言6則, 6人參與, 最新討論串1/1
※ 引述《icher168 (噗)》之銘言: : 哈哈 : 被你看出來了= =+ : 對....我的描述有問題 : 我知道... : 總歸依句 : 原矩陣應該為30000000x4 : 輸出的新矩陣為10000x12000 : 但問題是...我希望可以順序排列... : 也就是 : 原矩陣1:10000,1=>新矩陣1:10000,1 : 原矩陣10001:20000,1=>新矩陣1:10000,2 : 依此類推... : 但我看matlab的說明 : 其實他reshape後元素是有規則的"亂跳"...卡在此阿! : 感恩你看完我拉哩拉喳的文...還回答我問題 : 高手阿!! reshape並不是亂跳 他是重新調整記憶體的index用的 所以要先了解記憶體裡面的矩陣是長怎樣的 記憶體裡面存的矩陣一律是只有"一個"column 而我們看到的其他惟度的矩陣是要靠index判斷才能知道他到底是長怎樣 reshape就是藉由更改index來運作 舉例來說會比較好懂 現在我有一個二惟矩陣是長這樣子(假設叫做A) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 而他在記憶體裡面的型態則是如此(使用A(:)指令即可變成這樣) 1 7 13 2 8 14 3 9 15 4 10 16 5 11 17 6 12 18 可以看出只有一個column 每三個元素藉由index成為另一個column 最後組合成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 reshape的動作就是依照設定重新更改index成為新的矩陣 假設我現在要改成6x3好了 輸入reshape(A,6,3) 此時reshape會先將A進行A(:) 1 7 13 2 8 14 3 9 15 4 10 16 5 11 17 6 12 18 接著依照新的column元素各數來進行切割 1 7 13 2 8 14 3 9 15 4 10 16 5 11 17 6 12 18 所以最後的輸出會是這個 1 3 5 7 9 11 13 15 17 2 4 6 8 10 12 14 16 18 reshape的處理規則大概就是這樣 其實練習幾次就可以很快的知道該怎麼設定了 因為要依照上面的規則,有時候(應該是常常)沒辦法直接處理成想要的新形式 所以此時必須要進行一點小變化(原矩陣先轉置再處理,或是輸出矩陣再轉置) 這邊的技巧就得靠自己練習了 -- Deserves death! I daresay he does. Many that live deserve death. And some die that deserve life. Can you give that to them? Then be not too eager to deal out death in the name of justice, fearing for your own safty. Even the wise cannot see all ends. Gandalf to Frodo -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.228.212

10/29 02:46, , 1F
m這篇m這篇~~~~
10/29 02:46, 1F

10/29 10:38, , 2F
推一下 值得收看
10/29 10:38, 2F

10/29 20:32, , 3F
這篇一定要M 好有深度 直得多看
10/29 20:32, 3F

10/30 00:16, , 4F
果然是高手阿!!!太詳細啦!!!
10/30 00:16, 4F

10/30 09:08, , 5F
推薦
10/30 09:08, 5F

10/30 19:58, , 6F
推薦~讚!
10/30 19:58, 6F
文章代碼(AID): #15GvdI9I (MATLAB)
文章代碼(AID): #15GvdI9I (MATLAB)