您的位置:首页 > 编程语言 > MATLAB

Matlab 矩阵操作函数- reshape repmat permute squeeze flip

2016-03-09 13:51 489 查看
Matlab 中经常需要对矩阵进行维度上的操作,下面做一个简单的总结:

在Matlab中,不管矩阵的维度是多少,数据在内存中的存储都是按照 “行-列-页” 的顺序进行存储的。比如:>> a = [11,12,13; 21,22,23]

a =

11 12 13
21 22 23

>> a(:)

ans =

11
21
12
22
13
23

>> 有了这个概念之后,理解下面的函数就会很简单。

reshape -- 对矩阵中所有的元素做维度上的重新分配,分配的原则是把内存中的数据按照 “行-列-页” 的顺序填满目的矩阵。(必须保证重新分配后的矩阵与原矩阵元素数量一致):>> a = [11,12,13; 21,22,23]

a =

11 12 13
21 22 23

>> reshape(a,[3,2])

ans =

11 22
21 13
12 23

>> repmat -- 把当前矩阵当做单一元素来组合成目标矩阵:
>> a = [11,12,13; 21,22,23]

a =

11    12    13
21    22    23

>> repmat(a,[2,1,2])

ans(:,:,1) =

11    12    13
21    22    23
11    12    13
21    22    23

ans(:,:,2) =

11    12    13
21    22    23
11    12    13
21    22    23

>>
permute -- 改变现有矩阵维度的顺序,函数参数中有一个向量[2, 3, 1]表示第二个维度更改为第一个维度,第三个维度更改为第二个维度,第一个维度变为第三个维度(数字表示原维度编号,数字的位置表示现在维度的编号):
>> a(:,:,1) = [111,121,131; 211,221,231];
>> a(:,:,2) = [112,122,132; 212,222,232]

a(:,:,1) =

111   121   131
211   221   231

a(:,:,2) =

112   122   132
212   222   232

>> permute(a,[2,3,1])

ans(:,:,1) =

111   112
121   122
131   132

ans(:,:,2) =

211   212
221   222
231   232

>>
squeeze
-- 去掉矩阵中维度大小为1的维:
>> a

a(:,:,1) =

111
211

a(:,:,2) =

112
212

>> size(a)

ans =

2     1     2

>> b = squeeze(a)

b =

111   112
211   212

>> size(b)

ans =

2     2

>>
flip -- 按照指定的维度号进行矩阵的翻转:
>> a(:,:,1) = [111,121,131; 211,221,231];
>> a(:,:,2) = [112,122,132; 212,222,232]

a(:,:,1) =

111   121   131
211   221   231

a(:,:,2) =

112   122   132
212   222   232

>> fliplr(a)

ans(:,:,1) =

131   121   111
231   221   211

ans(:,:,2) =

132   122   112
232   222   212

>> flip(a,2)

ans(:,:,1) =

131   121   111
231   221   211

ans(:,:,2) =

132   122   112
232   222   212

>> flip(a,1)

ans(:,:,1) =

211   221   231
111   121   131

ans(:,:,2) =

212   222   232
112   122   132

>> flip(a,3)

ans(:,:,1) =

112   122   132
212   222   232

ans(:,:,2) =

111   121   131
211   221   231

>>
其中flip有两个引申出来的函数fliplr、flipud来具体实现矩阵的左右和上下翻转。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab 矩阵操作