MATLAB 学习笔记(二)—— 矩阵操作

一、向量

一、向量的创建

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):创建一个向量,第一个元素是10^{a},最后一个元素是10^{b},最后形成元素总量为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必须为整数;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值