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 -- 把当前矩阵当做单一元素来组合成目标矩阵:
-- 去掉矩阵中维度大小为1的维:
在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来具体实现矩阵的左右和上下翻转。
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器
- Export Figures for LaTeX Writing
- Image Batch Processing with Matlab
- MATLAB for Mac使编辑器支持中文
- [转]matlab中plot用法
- 初学数模-MATLAB Quick Start! Part I