Re: [問題] 切割矩陣
※ 引述《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
10/29 02:46, 1F
推
10/29 10:38, , 2F
10/29 10:38, 2F
推
10/29 20:32, , 3F
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
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章