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

来源:互联网 发布:张北数据港招聘信息 编辑:程序博客网 时间:2024/06/07 04:26

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    23ans(:,:,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   231a(:,:,2) =   112   122   132   212   222   232>> permute(a,[2,3,1])ans(:,:,1) =   111   112   121   122   131   132ans(:,:,2) =   211   212   221   222   231   232>> 
squeeze -- 去掉矩阵中维度大小为1的维:
>> aa(:,:,1) =   111   211a(:,:,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   231a(:,:,2) =   112   122   132   212   222   232>> fliplr(a)ans(:,:,1) =   131   121   111   231   221   211ans(:,:,2) =   132   122   112   232   222   212>> flip(a,2)ans(:,:,1) =   131   121   111   231   221   211ans(:,:,2) =   132   122   112   232   222   212>> flip(a,1)ans(:,:,1) =   211   221   231   111   121   131ans(:,:,2) =   212   222   232   112   122   132>> flip(a,3)ans(:,:,1) =   112   122   132   212   222   232ans(:,:,2) =   111   121   131   211   221   231>> 
其中flip有两个引申出来的函数fliplr、flipud来具体实现矩阵的左右和上下翻转。

0 0
原创粉丝点击