目录
[1) 水平方向的拼接](#1) 水平方向的拼接)
矩阵是进行数据处理和运算的基本元素。
一,矩阵的创建
矩阵的创建主要有四种方法:直接输入法,利用M文件创建矩阵,利用其它文本编辑器建立矩阵,利用matlab内置函数建立矩阵。
1,直接输入法创建矩阵
直接输入法:直接从键盘输入矩阵的元素。
将矩阵的元素用方括号 括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号 隔开,不同行的元素之间用分号 或回车符分隔。如下创建三行两列的矩阵👇
Matlab
Matrix=[1,2;3,4;5,6]
也可以使用matlab的系统内置特殊函数来创建矩阵,如下👇
1)使用zeros函数,创建元素全部为0的矩阵
2)使用ones函数,创建元素全部为1的矩阵
3)使用eye函数,创建单位矩阵,单位矩阵是方阵,行和列的数量必须相等
4)使用rand函数,创建在(0,1)区间均匀分布的随机矩阵
5)使用randn函数,创建均值为0,方差为1的标准正态分布随机矩阵
6)使用hilb函数,创建Hilbert希尔伯特矩阵(方阵)
7)使用magic函数,创建魔法矩阵(方阵)
2,利用M文件创建矩阵
利用M文件创建矩阵:使用系统自带的文本编辑调试器专门建立一个M文件。
如下,如果当前界面没有文本编辑器的窗口↓
在命令行中输入edit,并回车↓
之后在m文件中编写代码,输入待建矩阵(三行两列)↓
Matlab
Matrix=[1,2;3,4;5,6]
保存m文件的时候,不能和里面的变量名一样,不然无法识别。
接着,在matlab命令行窗口中输入包含矩阵的m文件的文件名,就可以自动创建一个名为m_Matrix的矩阵,可供以后使用。因此,如果遇到矩阵比较大,不想重复创建的话,建议使用这种方式创建矩阵。
因为我习惯性在每个语句的结束位置加上分号,所以当我输入m_Matrix后,没有矩阵输出↓
这个时候只需要将分号去掉即可↓
3,利用其它文本编辑器创建矩阵
利用其它文本编辑器创建矩阵: 例如编辑一个文本文件。
在记事本中输入:
html
16.0 3.0 2.0 9.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0
编辑好之后 ctrl+s 保存(这里留了一个小坑)
再回到matlab命令行窗口输入命令: load t_Matrix.txt,会报错↓
之所以报错,是因为在matlab工具箱的搜索路径里面没有txt目录(也就不会有在txt目录下的t_Matrix.txt文件),这个时候有两个方法解决,一个是只添加txt路径,另外一个是添加整个自建matlab工程所在的目录。这里我为了后期方便,直接添加整个目录(包含下面的子目录)↓。
之后就会将自创的matlab目录下的全部子文件加载到matlab软件的搜索路径下↓
再重新输入命令:
html
load t_Matrix.txt
这次没有报错,在工作区可以看到t_Matrix的文件中的矩阵大小:(四行四列)
【当加载的文件过多并且开始杂乱的时候,可以在matlab命令行窗口输入clear清空工作区,清空之后如果还想用,就得需要重新加载】
之后在matlab命令行窗口输入加载进去的文件名t_Matrix,如下👇所示
可以看到在M编辑器窗口参看文件的结构及数据排列。
二,矩阵的拼接
两个或者是两个以上的单个矩阵,按一定的方向进行链接生成新的矩阵,就是矩阵的拼接。
矩阵的拼接是一种创建矩阵的特殊方法,它的基础元素是原始矩阵
1,基本拼接
矩阵的拼接有水平方向的拼接和垂直方向的拼接。
1) 水平方向的拼接
水平方向的拼接语法:
新矩阵名=[参与拼接的矩阵1**,** 参与拼接的矩阵2] 或新矩阵名=[参与拼接的矩阵1参与拼接的矩阵2]
即 或
可以看到,在对矩阵进行水平方向的结构操作时,都是默认使用逗号或者是空格隔开,和之前学习的创建矩阵一样。
设参与拼接的两个矩阵,其中一个矩阵为,另外一个矩阵为,则新生成的矩阵为,即新矩阵的列数是两个原矩阵的列数相加,行数不变。
【注意】:要串联的数组的维度必须一致,对于水平方向的拼接来说,只需要将两个原矩阵的行数设置一样就行,列数无要求,可多可少。
如下,将矩阵matrix1和矩阵matrix2进行水平拼接,得到新的矩阵,如下👇
2)垂直方向的拼接
垂直方向的拼接语法:
新矩阵名=[参与拼接的矩阵1**;**参与拼接的矩阵2] % 推荐这种方法进行拼接
或 新矩阵名=[参与拼接的矩阵1
参与拼接的矩阵2]
即
或
可以看到,在对矩阵进行垂直方向的结构操作时,都是默认使用分号或者是回车键隔开,和之前学习的创建矩阵一样。
设参与拼接的两个矩阵,其中一个矩阵为,另外一个矩阵为,则新生成的矩阵为,即新矩阵的行数是两个原矩阵的列数相加,列数不变。
【注意】:要并联的数组的维度必须一致,对于垂直方向的拼接来说,只需要将两个原矩阵的列数设置一样就行,行数无要求,可多可少。
如下,将矩阵matrix1和矩阵matrix2进行垂直方向拼接,得到新的矩阵,如下👇
3)拼接函数
在matlab中,除了使用矩阵拼接符 外,还可以使用矩阵拼接函数来拼接矩阵。
|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| horzcat | 水平拼接 |
| vertcat | 垂直拼接 |
| cat | 指定维数拼接 可以看到,cat函数有两种不同的参数列表,一个是只有两个矩阵进行拼接,另外一个是多个矩阵进行拼接。现以第一个为例(只有两个矩阵进行拼接),当dim输入不同,拼接的方法也会不同: * dim=1,沿垂直方向上对两个矩阵进行拼接。 * dim=2,沿水平方向上对两个矩阵进行拼接。 * dim=3,三维矩阵 |
| repmat | 通过对现有矩阵的复制和粘贴操作拼接 |
| blkdiag | 现有矩阵构造一个块对角矩阵 |
| | |
[matlab中的矩阵拼接函数]
cat函数的dim=3时,对应的效果如下👇( matrix1=ones(3,2),matrix2=zeros(3,2))
其它函数现在暂时用不到,之后遇到了再来补充。如果有兴趣的可以自行去了解并学习。
三,矩阵的寻访
在matlab中,矩阵的寻访主要有:下标寻访,单元素寻访,多元素寻访。
1,下标寻访(全下标方式)
matlab中矩阵的下标表示与常用的数学习惯相同:使用分别表示行和列的"双下标",矩阵中的元素都有对应的第几行,第几列。这种表示方法简单直观,几何概念比较清晰。
例如我有一个矩阵:
如果我想要输出矩阵的第三行第二个元素:6,那么我就需要写上矩阵的名字matrix加上小括号,小括号里面传入行的序号和列的序号(第一行第一列用(1,1)表示),因此输出元素6的语句如下:
2,单元素寻址(单下标方式)
单元素寻址就是将矩阵看成一维的向量(扁平化)。依旧是之前的矩阵:
如果我想要取出元素6,使用单下标的方式,就是矩阵名加上小括号,小括号内输入元素6横着数的序号6:
当矩阵数据较多,不能在较短时间内通过序号数到所要找的元素时,推荐通过行和列的表达式来找到对应元素的序号。假设一个矩阵为(M行N列),要找到第 行第列元素的序号则
例如,我有一个十三行十列的矩阵
共个元素,元素从1开始并递增(主要是为了方便查看计算结果是否正确)。
Matlab
% 创建一个包含从 1 到 130 的向量
data = 1:130
% 将向量重塑为 13 行 10 列的矩阵
matrix = reshape(data, 13, 10)
如果我要使用单下标的方式找到第十二行,第五列的元素64
那么,通过表达式可知:
所以元素64在扁平化的一维向量中的第64位。编写语句:matrix(64)
就可以通过单下标找到对应的元素。
再举一个矩阵的例子
Matlab
matrix1=[1,2,3,4,5,6,7,8,9,10,11,12,13;14,15,16,17,18,19,20,21,22,23,24,25,26;27,28,29,30,31,32,33,34,35,36,37,38,39]
要找到第二行第五列的元素18,对应的序号
通过单下标寻址得到元素 18 ↓
3,多元素寻址
多元素寻址的语法:
矩阵名[ 预查找行的起始位**:** 预查找行的结束位 , 预查找列的起始位**:** 预查找列的结束位**]**
例如我有一个三行十列的矩阵:
接下来通过矩阵多元素寻址,包括寻址该矩阵的
-
某一行或某一列的若干元素;
① 第二行的第三,四,五列的元素。行只需要一个数,列的位置放置两个数并用冒号分隔。
② 第二列的第一,二,三行的元素
-
访问整行,整列元素;
①整个第二行
②整个第二列
-
访问若干列和若干行的元素;
① 例如访问第二,四,六列的元素
※起始位和结束位中间的数是步长⭐,表示每两步取一组数。※① 例如访问第一,二,三行的元素
-
访问矩阵所有元素
有问题请在评论区留言或者是私信我,回复时间不超过一天。