作者Gwaewluin (神无月 孝臣)
看板MATLAB
标题Re: [问题] 切割矩阵
时间Sun Oct 29 02:16:35 2006
※ 引述《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
1F:推 sunev:m这篇m这篇~~~~ 10/29 02:46
2F:推 NCKZ:推一下 值得收看 10/29 10:38
3F:推 icehunter:这篇一定要M 好有深度 直得多看 10/29 20:32
4F:推 icher168:果然是高手阿!!!太详细啦!!! 10/30 00:16
5F:推 zxvc:推荐 10/30 09:08
6F:推 fanitic:推荐~赞! 10/30 19:58