当前位置:网站首页>【Matlab】矩阵操作
【Matlab】矩阵操作
2022-06-12 23:46:00 【不牌不改】
矩阵操作
生成矩阵
生成行矩阵的方式:
冒号表达式
x = 1:1:5 % 1 2 3 4 5
以步长为1,从1到5生成数值,构成行矩阵。
若不设置步长,则默认步长为1。
linspace(a, b, n)
linspace(1, 5, 5) % 1 2 3 4 5
从1到5生成5个数值,构成行矩阵。
从a到b生成n个数值,构成行矩阵。
若不设置n,则默认为100。
由矩阵生成矩阵
repmat函数
B = repmat(A, m, n):将矩阵A当作一个整体,水平复制m次,竖直复制n次,得到 m × n m×n m×n个A矩阵构成的矩阵,返回新矩阵。
B = repmat(A, [m, n]):用法同上,这种调用形式一般的用法为:C = repmat(A, size(B));
。
A = randi(10, 2, 3) % 产生[1, 10]的2×3的矩阵
B = repmat(A, 3, 2)
结果如下:
A =
9 4 1
7 10 5
B =
9 4 1 9 4 1
7 10 5 7 10 5
9 4 1 9 4 1
7 10 5 7 10 5
9 4 1 9 4 1
7 10 5 7 10 5
矩阵元素的引用方式
通过下标引用矩阵元素
A(3, 4)
获取矩阵A第三行第四列的元素。A(5, 7) = 2
将矩阵A第五行第七列的元素设置为2,若矩阵A之前大小不足五行七列,则对矩阵进行扩展,未赋值的元素被设置为0。通过序号引用矩阵元素
列优先,从1开始。
序号与下标是一一对应的,以 m × n m×n m×n矩阵A为例,矩阵元素A(i, j)的序号为 ( j − 1 ) × m + i (j-1)×m+i (j−1)×m+i。
矩阵元素的序号和下标可以利用sub2ind和ind2sub函数相互转换。
sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号。调用格式为:
D = sub2ind(S, I, J)
其中,
S
为一个由行数和列数构成的矩阵,I
为要进行转化的矩阵元素的行坐标构成的矩阵,也就是可以一次性转化多个矩阵元素的坐标,同样的,J
为要进行转化的矩阵元素的列坐标构成的矩阵,D
为对应的序号矩阵。显然,I
和J
必须是同型矩阵。A = [1:3;4:6] D = sub2ind(size(A), [1 2;2 2], [1 1;3 2])
结果如下:
A = 1 2 3 4 5 6 D = 1 2 6 4
size(A)
返回一个由矩阵A的行数和列数构成的行矩阵。ind2sub函数:将把矩阵元素的序号转换成对应的下标,其调用格式为:
[I, J] = ind2sub(S, D)
字母含义与上面相同。
D
也同样可以是个矩阵,得到的I
和J
也是矩阵。[I J] = ind2sub([3 3], [1 3 5])
结果如下:
I = 1 3 2 J = 1 1 2
获取子矩阵
A (i, : ) | 第i行的全部元素 |
A ( : , j) | 第j列的全部元素 |
A( i : i+m , k : k+m ) | 第i~i+m行内且在第k~k+m列中的所有元素 |
A( i : i+m , : ) | 第i~i+m行的全部元素 |
end运算符:表示某一维的末尾元素下标。
A = reshape(1:20, [5, 4])'
A1 = A([1 4], 3:end)
A2 = A(end:-1:1, : )
结果如下:
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
A1 =
3 4 5
18 19 20
A2 =
16 17 18 19 20
11 12 13 14 15
6 7 8 9 10
1 2 3 4 5
reshape函数讲解
reshape函数是一个列优先函数,无论是从矩阵中取数还是向新矩阵中加数,都是按照列优先的原则进行的。
reshape函数的标准用法:reshape(A, [ROW, COL])
或reshape(A, ROW, COL)
,在矩阵总元素数目保持不变的前提下,将矩阵A转型成 R O W × C O L ROW×COL ROW×COL的矩阵,返回新矩阵。
如何理解"shape函数是个列优先函数"?
A = 1:6
A1 = reshape(A, [2, 3])
结果如下:
A =
1 2 3 4 5 6
A1 =
1 3 5
2 4 6
取A中序号为1的元素作为A1中序号为1的元素,取A中序号为2的元素作为A1中序号为2的元素,……,取A中序号为6的元素作为A1中序号为6的元素。这样就填满了新型矩阵A1,因为此函数是按元素的序号顺序对新矩阵进行的赋值,而元素编号的顺序是列优先的,所以此函数是列优先的函数。
该函数的本质只是改变原矩阵的行数和列数,但并不改变原矩阵的元素个数及其存储顺序。
另:可参考
对于上面为构造 4 × 5 4×5 4×5的按行递增的矩阵,必须要先构造 5 × 4 5×4 5×4的矩阵,再进行转置操作。其中,'
就是进行转置的操作。
A1矩阵是获取了A矩阵的第一行从第三列到第五列(即最后一列)的全部元素和第四行从第三列到第五列(即最后一列)的全部元素,这些元素的对应位置不变,但绝对位置发生改变,即用这些数填满一个新型矩阵。
A2矩阵可以理解为将A矩阵上下翻转。先取第四行(即最后一行)的全部元素,也就相当于把第四行的全部元素放在了A2矩阵的第一行,再取第三行的全部元素,也就相当于把第三行的全部元素放在了A2矩阵的第二行,……,从而实现了上下翻转的操作。注意将步长设置为-1,否则默认为1,而默认为1是无法实现从end减少到1的,因此会出现错误。这是一个比较特殊的用法或技巧。
删除子矩阵
通过对子矩阵赋值为空矩阵来实现删除子矩阵。
A = reshape(1:20, 5, 4)';
A([2 4], :) = []
结果如下:
A =
1 2 3 4 5
11 12 13 14 15
我们赋值的操作导致A矩阵失去了第二行和第四行的全部元素,新的A矩阵是一个 2 × 5 2×5 2×5的矩阵。
如果我们要是删除的子矩阵的A中不与A的第一行、最后一行、第一列和最后一列相交的子矩阵会成功吗,如果成功那么新矩阵又会是什么样子呢?
A = reshape(1:20, 5, 4)';
A(2:3, 2:4) = []
结果如下:
空赋值只能具有一个非冒号索引。 % ERROR!
我们得到了一个错误的警告,“空赋值只能具有一个非冒号索引”,这说明如果我们要想将子矩阵设置为空矩阵,则必须要是将一个由若干完整的列或若干完整的行构成的子矩阵,也就是非冒号索引最多一个。(你也可以理解为,只有这样要求,才能保证输出的是合法的矩阵,如果不这样要求,那你难道能想到输出是什么吗?)
冒号索引的特殊用法
B(:)
可以得到矩阵B的元素构成的列向量,依旧是列优先。
B = [1 2 3; 4 5 6; 7 8 9]
B(:)
结果如下:
B =
1 2 3
4 5 6
7 8 9
ans =
1
4
7
2
5
8
3
6
9
可以看出B(:)
等价于reshape(B, 6, 1)
将矩阵B转换为了六行一列。
因此,对于任意的一个矩阵A,A(:)
等价于reshape(A, ROW×COL, 1)
。
边栏推荐
- SAP Business Technology Platform (BTP) workflow function introduction
- 36 krypton's debut | "osogena" won nearly ten million angel rounds of financing. The original DLR scientists of German Aerospace Research and development system modeling and simulation CAE software PA
- How to publish OSM maps locally and customize the mapping
- 支持Canvas的Leaflet.Path.DashFlow动态流向线
- Bit_ Binary number
- [opencv learning] small ticket recognition based on perspective transformation and OCR recognition
- Teach you how to grab ZigBee packets through cc2531 and parse encrypted ZigBee packets
- Face detection: mtcnn
- Initial experience of Huawei cloud Conference [Huawei cloud to jianzhiyuan]
- 2022年危險化學品經營單比特安全管理人員考試試題及在線模擬考試
猜你喜欢
[leetcode] understanding and usage of map[key]+
How to get Matplotlib figure size
Enterprise wechat H5_ Authentication, H5 application web page authorization login to obtain identity
[opencv learning] perspective transformation matrix
QT actual combat case (38) -- using qpprocess class to realize the function of starting process
數組
How to load 100000 pieces of data in leaflet
CST learning: four element array design of circular patch antenna (III) array formation and parallel excitation
Deep feature synthesis and genetic feature generation, comparison of two automatic feature generation strategies
2022年危险化学品经营单位安全管理人员考试试题及在线模拟考试
随机推荐
RT thread quick start - experience RT thread
Alien Skin Exposure X7调色滤镜插件,RAW后期处理工具
Mgr and greatsql resource summary
TCP与UDP
Novice must see! How rust beginners write gear smart contracts (1)
Introduction to message oriented middleware (message queue)
[opencv learning] perspective transformation matrix
华为云弹性云服务器ECS使用【华为云至简致远】
Save state when viewpager is used with fragment fragmentpageradapter
1111111111111111111111111111111111111111111111111111111
2202 - production de CV
[North Asia data recovery] data recovery cases in which the partitions disappear and the partitions are inaccessible after the server reinstalls the system
SAP UI5 如何通过 manifest.json 文件定义第三方库依赖关系
设计消息队列存储信息数据的MySQL表结构
Examination questions and online simulation examination for safety management personnel of hazardous chemical business units in 2022
SAP 业务技术平台(BTP) Workflow(工作流)功能介绍
Restrictions on MySQL function creation
2022年危险化学品经营单位安全管理人员考试试题及在线模拟考试
Teach you how to grab ZigBee packets through cc2531 and parse encrypted ZigBee packets
Summary of individual NLP internship experience