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

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

Matlab 中经常需要对矩阵进行维度上的操作,下面做一个简单的总结:


在Matlab中,不管矩阵的维度是多少,数据在内存中的存储都是按照 “行-列-页” 的顺序进行存储的。比如:


 
 
  1. >> a = [ 11, 12, 13; 21, 22, 23]
  2. a =
  3. 11 12 13
  4. 21 22 23
  5. >> a( :)
  6. ans =
  7. 11
  8. 21
  9. 12
  10. 22
  11. 13
  12. 23
  13. >>
有了这个概念之后,理解下面的函数就会很简单。


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


 
 
  1. >> a = [ 11, 12, 13; 21, 22, 23]
  2. a =
  3. 11 12 13
  4. 21 22 23
  5. >> reshape(a,[ 3, 2])
  6. ans =
  7. 11 22
  8. 21 13
  9. 12 23
  10. >>
repmat -- 把当前矩阵当做单一元素来组合成目标矩阵:

 
 
  1. >> a = [ 11, 12, 13; 21, 22, 23]
  2. a =
  3. 11 12 13
  4. 21 22 23
  5. >> repmat(a,[ 2, 1, 2])
  6. ans( :, :, 1) =
  7. 11 12 13
  8. 21 22 23
  9. 11 12 13
  10. 21 22 23
  11. ans( :, :, 2) =
  12. 11 12 13
  13. 21 22 23
  14. 11 12 13
  15. 21 22 23
  16. >>
permute -- 改变现有矩阵维度的顺序,函数参数中有一个向量[2, 3, 1]表示第二个维度更改为第一个维度,第三个维度更改为第二个维度,第一个维度变为第三个维度(数字表示原维度编号,数字的位置表示现在维度的编号):

 
 
  1. >> a( :, :, 1) = [ 111, 121, 131; 211, 221, 231];
  2. >> a( :, :, 2) = [ 112, 122, 132; 212, 222, 232]
  3. a( :, :, 1) =
  4. 111 121 131
  5. 211 221 231
  6. a( :, :, 2) =
  7. 112 122 132
  8. 212 222 232
  9. >> permute(a,[ 2, 3, 1])
  10. ans( :, :, 1) =
  11. 111 112
  12. 121 122
  13. 131 132
  14. ans( :, :, 2) =
  15. 211 212
  16. 221 222
  17. 231 232
  18. >>
squeeze -- 去掉矩阵中维度大小为1的维:

 
 
  1. >> a
  2. a( :, :, 1) =
  3. 111
  4. 211
  5. a( :, :, 2) =
  6. 112
  7. 212
  8. >> size(a)
  9. ans =
  10. 2 1 2
  11. >> b = squeeze(a)
  12. b =
  13. 111 112
  14. 211 212
  15. >> size(b)
  16. ans =
  17. 2 2
  18. >>
flip -- 按照指定的维度号进行矩阵的翻转:

 
 
  1. >> a( :, :, 1) = [ 111, 121, 131; 211, 221, 231];
  2. >> a( :, :, 2) = [ 112, 122, 132; 212, 222, 232]
  3. a( :, :, 1) =
  4. 111 121 131
  5. 211 221 231
  6. a( :, :, 2) =
  7. 112 122 132
  8. 212 222 232
  9. >> fliplr(a)
  10. ans( :, :, 1) =
  11. 131 121 111
  12. 231 221 211
  13. ans( :, :, 2) =
  14. 132 122 112
  15. 232 222 212
  16. >> flip(a, 2)
  17. ans( :, :, 1) =
  18. 131 121 111
  19. 231 221 211
  20. ans( :, :, 2) =
  21. 132 122 112
  22. 232 222 212
  23. >> flip(a, 1)
  24. ans( :, :, 1) =
  25. 211 221 231
  26. 111 121 131
  27. ans( :, :, 2) =
  28. 212 222 232
  29. 112 122 132
  30. >> flip(a, 3)
  31. ans( :, :, 1) =
  32. 112 122 132
  33. 212 222 232
  34. ans( :, :, 2) =
  35. 111 121 131
  36. 211 221 231
  37. >>
其中flip有两个引申出来的函数fliplr、flipud来具体实现矩阵的左右和上下翻转。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值