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

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来具体实现矩阵的左右和上下翻转。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值