一、向量
一、向量的创建
1)直接输入法:a = [1, 2, 3] a = [1 2 3] a = [1 enter 2 enter 3] a = [1; 2; 3] 【符号英文】
2)冒号法:A(起始值):step(步长):B(终止值)—— 不一定刚好在终止值结束
例:1:10:3(返回1),5:2:1(返回空),10:-1:6(返回10,9,8,7,6),10:-100:5(返回10),10:-10:50(返回空),1:0:2(返回空)
3)用MATLAB函数创建:
- linspace(a,b,n=100):创建一个向量,第一个元素是a,最后一个元素是b,最后形成元素总量为n的线性间隔的向量;—— PS:a不一定非要比b小,可以从大往小走
- logspace(a,b,n=50):创建一个向量,第一个元素是
,最后一个元素是
,最后形成元素总量为n的等比数列的向量;—— PS:a不一定非要比b小,可以从大往小走
二、向量元素的引用
在MATLAB中,我们可以使用length函数或者numel函数来计算向量中包含的元素个数,需要注意,和其它语言不同,MATLAB的向量索引是从1开始的。
1)单元素索引:a(单个索引号)
2)多元素索引:a(多个索引号 —— 向量)
3)矩阵引用:a(行,列)
注意:可以使用关键字‘end’表示向量的最后,单/多元素索引都适用
三、向量元素的修改和删除
1)修改: a(单个索引号) = 修改值; a(向量) = 与向量长度相同的修改值; a(向量) = 单个数;
PS:索引号可以超过现存最大,就变为新增,空位补零;
2)删除:a(单个索引号/向量) = [] ; —— 此时索引号不得超过length(a)
二、矩阵
矩阵的大小我们可以通过,size函数获得。
- size(矩阵)返回 [行, 列]
- size(矩阵,维度值),维度值=1,返回行数,维度值=2,返回列数
如果将矩阵作为length、numel函数的输入,那么length函数会返回行列中的较大值,numel会返回矩阵元素的总数。
一、矩阵的创建
1)直接输入法:a[1 2 3; 4 5 6] —— 中括号,同行之间用逗号或者空格,行与行之间用分号或者回车;
2)函数创建法:(n阶方阵)(行, 列)
- zeros(n阶方阵)/(行, 列)【创建全零矩阵】、ones(n阶方阵)/(行, 列)【创建全1矩阵】、eye(n阶方阵)/(行, 列)【创建单位矩阵】
- rand(n阶方阵)/(行, 列)【0-1之间均匀分布的随机数】、randi([min,max],行,列)/(max,行,列-此时最小值默认为1)【均匀分布的整数】、randn(n阶方阵)/(行, 列)【标准正态分布的随机数】
- diag(向量,数值)将向量里的元素放到对角线上,数值决定是第几对角线,0是主对角线,正数往右移,负数往左移【用来创建对角矩阵】、(矩阵、数值)从矩阵中提取对角元素为向量,数据同上【用来提取对角元素的值】;blkdiag(矩阵1,矩阵2,...)【创建分块矩阵】
3)导入本地文件的数据
‘主页—>导入数据’
其余跳转之后的内容,之后补
二、矩阵元素的引用
1)双下标索引:a(行,列)【单个元素】;a(行向量,列向量)【多元素】—— 此处end也有效,【参数(1:end)等价(:)】
2)单下标索引:A(5)== A(2,2);A(2:5)返回矩阵第2,3,4,5个元素的值;
注意:A(:)与A(1:end)有区别A(:)生成列向量,A(1:end)生成行向量
3)sub2ind([行,列],行,列)和ind2sub()是两个功能刚好相反的函数,sub2ind是将矩阵的下标转换为线性索引,ind2sub是将线性索引转换为矩阵的下标;
- sub2ind([行,列],行,列):针对大小为[行,列]的矩阵,返回行,列对应的元素的线性索引;
比如 ooo = sub2ind([3,3],2,2),得ooo = 5
- ind2sub([行,列],索引号):针对大小为[行,列]的矩阵,返回线性索引对应的元素对应的行列下标;
比如 [a,b] = ind2sub([3,3],5),得[a,b] = [2,2]
三、矩阵元素的修改和删除
1)索引修改:
- 下标:A(行,列)= 修改值;A(行,:)= 修改值【修改一行全部元素】;A(向量,向量)= 修改矩阵 【等号左右维度需要匹配】
- 线性索引:A(索引号)= 修改值;A(向量)= 修改值;A(向量)= 修改向量【等号左右两边要同维】
PS:不论是下标还是线性索引,如果超过了现有的,会自动扩展,未被赋值的自动用0填充;
2)删除:
- 下标删除:删除只能删除整行,或者整列,不然会报错;A(:,3)= [];A(3,:)= [];
- 线性索引删除:使用线性索引可以删除任意元素,剩下的元素会按照顺序放入到一个向量中;
四、矩阵的拼接和重复
1)拼接:【以下拼接矩阵数并不止两个】
- 横向拼接:(1)[A, B],[A B];(2)horzcat(A,B);
- 纵向拼接:(1)[A; B]; (2) [A 回车 B];(3)vertcat(A,B);
- cat函数拼接:cat(dim,A,B) —— dim=1,对行进行拼接即纵向拼接;dim=2,对列进行拼接即横向拼接;
2)矩阵重复:
- repmat(矩阵A,行m,列n):把整个矩阵A在行方向重复m次,在列方向重复n次
- repelem(向量V,次数n):把向量V中的元素都重复n次,比如V = [1,2,3]变为[1,1,2,2,3,3];(向量V,向量N):把V[1]重复N[1]次,把V[2]重复V[2]次...;(矩阵A,行m,列n):A矩阵的每个元素行方向重复m次,列方向重复n次,比如[1,2;3,4]变为[1,1,2,2;1,1,2,2;3,3,4,4;3,3,4,4];(矩阵A,向量M,向量N)同上每个元素重复次数不统一;
五、矩阵的重构和重新排列
1)reshape(A,m,n)/(A,[m,n]):矩阵A线性索引结果不变的情况下变为m行n列矩阵;其中m和n有一个可以为空[],MATLAB会自动计算;
2)sort:
- 对向量进行排序:sort(V)将向量V按照从小到大的顺序升序排序,sort(V,'descend')将向量V按照从大到小的顺序降序排序;注意:sort函数有两个返回值[AFsort, indx] AFsort是排序后的向量,indx也是一个向量,其中每个元素为AFsort向量对应元素在原向量中的下标;
- 对矩阵进行排序:sort(A,dim),dim=1是在行方向上排序,即对矩阵的每一列进行升序排序,dim=2是在列方向上排序,即对矩阵的每一行进行升序排序;(A,dim,'descend')同上变为降序排序;PS:sort(A ,1)与sort(A)等价;注意:sort函数有两个返回值[AFsort, indx] AFsort是排序后的矩阵,indx也是一个矩阵,其中每个元素为AFsort矩阵对应元素在原矩阵行/列的索引;
3)sortrows(A,num):基于矩阵A的num列对矩阵进行排序,同一行的元素不会改变;PS:num可以是一个向量,如果num1的元素相同就比较num2的值;num如果是整个列的顺序向量可以省略;如果num1升序,num2降序则(A,num,{‘ascend’,‘descend’})注意:sortrows函数有两个返回值[AFsort, indx] ,AFsort是排序后的矩阵,indx是一个向量,向量中的元素表示AFsort对应的行是原来行的第几行;
4)flip() / fliplr() / flipud():对矩阵进行翻转,lr是左右翻转,ud是上下翻转;
- flip:V= [1,2,3,4] ——> flip(V) ——> [4,3,2,1]
- flip:flip(矩阵),上下翻转
- flip:flip(矩阵,dim),dim=1沿行方向翻转,即上下翻转;dim=2沿列方向翻转,即左右翻转;
5)rot90(A,k):将矩阵A逆时针翻转90*k,k默认为1,且k必须为整数;