Matlab学习01-矩阵

目录

一,矩阵的创建

1,直接输入法创建矩阵

2,利用M文件创建矩阵

3,利用其它文本编辑器创建矩阵

二,矩阵的拼接

1,基本拼接

1) 水平方向的拼接

2)垂直方向的拼接 

3)拼接函数 

三,矩阵的寻访

1,下标寻访(全下标方式)

 2,单元素寻址(单下标方式)

3,多元素寻址


矩阵是进行数据处理和运算的基本元素。

一,矩阵的创建

 矩阵的创建主要有四种方法:直接输入法,利用M文件创建矩阵,利用其它文本编辑器建立矩阵,利用matlab内置函数建立矩阵。

1,直接输入法创建矩阵

直接输入法:直接从键盘输入矩阵的元素。
将矩阵的元素用方括号 [] 括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号 , 隔开,不同行的元素之间用分号 ; 或回车符分隔。如下创建三行两列的矩阵👇

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文件中编写代码,输入待建矩阵(三行两列)↓

Matrix=[1,2;3,4;5,6]  

保存m文件的时候,不能和里面的变量名一样,不然无法识别。

接着,在matlab命令行窗口中输入包含矩阵的m文件的文件名,就可以自动创建一个名为m_Matrix的矩阵,可供以后使用。因此,如果遇到矩阵比较大,不想重复创建的话,建议使用这种方式创建矩阵。
因为我习惯性在每个语句的结束位置加上分号,所以当我输入m_Matrix后,没有矩阵输出↓

这个时候只需要将分号去掉即可↓

3,利用其它文本编辑器创建矩阵

利用其它文本编辑器创建矩阵:例如编辑一个文本文件。
在记事本中输入:

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软件的搜索路径下↓

再重新输入命令:

 load t_Matrix.txt



这次没有报错,在工作区可以看到t_Matrix的文件中的矩阵大小:4\times4(四行四列)
【当加载的文件过多并且开始杂乱的时候,可以在matlab命令行窗口输入clear清空工作区,清空之后如果还想用,就得需要重新加载】
之后在matlab命令行窗口输入加载进去的文件名t_Matrix,如下👇所示

可以看到在M编辑器窗口参看文件的结构及数据排列。

二,矩阵的拼接

两个或者是两个以上的单个矩阵,按一定的方向进行链接生成新的矩阵,就是矩阵的拼接。

矩阵的拼接是一种创建矩阵的特殊方法,它的基础元素是原始矩阵

1,基本拼接

 矩阵的拼接有水平方向的拼接和垂直方向的拼接。

1) 水平方向的拼接

水平方向的拼接语法:

新矩阵名=[参与拼接的矩阵1,参与拼接的矩阵2] 或新矩阵名=[参与拼接的矩阵1 参与拼接的矩阵2] 

C=[A,B] 或  C=[A\, B]

可以看到,在对矩阵进行水平方向的结构操作时,都是默认使用逗号或者是空格隔开,和之前学习的创建矩阵一样。

设参与拼接的两个矩阵,其中一个矩阵为M_{a} \times N_{a},另外一个矩阵为M_{b} \times N_{b},则新生成的矩阵为M_{a} \times (N_{a}+N_{b}),即新矩阵的列数是两个原矩阵的列数相加,行数不变。
【注意】:要串联的数组的维度必须一致,对于水平方向的拼接来说,只需要将两个原矩阵的行数设置一样就行,列数无要求,可多可少。

如下,将矩阵matrix1和矩阵matrix2进行水平拼接,得到新的矩阵,如下👇

2)垂直方向的拼接 

垂直方向的拼接语法:

新矩阵名=[参与拼接的矩阵1参与拼接的矩阵2]                       % 推荐这种方法进行拼接

或 新矩阵名=[参与拼接的矩阵1

参与拼接的矩阵2] 

C=[A;B] 

  或C=[A

B]

可以看到,在对矩阵进行垂直方向的结构操作时,都是默认使用分号或者是回车键隔开,和之前学习的创建矩阵一样。

设参与拼接的两个矩阵,其中一个矩阵为M_{a} \times N_{a},另外一个矩阵为M_{b} \times N_{b},则新生成的矩阵为(M_{a}+M_{b}) \times N_{a},即新矩阵的行数是两个原矩阵的列数相加,列数不变。
【注意】:要并联的数组的维度必须一致,对于垂直方向的拼接来说,只需要将两个原矩阵的列数设置一样就行,行数无要求,可多可少。

如下,将矩阵matrix1和矩阵matrix2进行垂直方向拼接,得到新的矩阵,如下👇

 

3)拼接函数 

 在matlab中,除了使用矩阵拼接符 [\, ]外,还可以使用矩阵拼接函数来拼接矩阵。

matlab中的矩阵拼接函数
horzcat水平拼接
vertcat垂直拼接
cat指定维数拼接

可以看到,cat函数有两种不同的参数列表,一个是只有两个矩阵进行拼接,另外一个是多个矩阵进行拼接。现以第一个为例(只有两个矩阵进行拼接),当dim输入不同,拼接的方法也会不同:

  • dim=1,沿垂直方向上对两个矩阵进行拼接。
  • dim=2,沿水平方向上对两个矩阵进行拼接。
  • dim=3,三维矩阵
repmat通过对现有矩阵的复制和粘贴操作拼接
blkdiag现有矩阵构造一个块对角矩阵

cat函数的dim=3时,对应的效果如下👇( matrix1=ones(3,2),matrix2=zeros(3,2))

其它函数现在暂时用不到,之后遇到了再来补充。如果有兴趣的可以自行去了解并学习。

三,矩阵的寻访

 在matlab中,矩阵的寻访主要有:下标寻访,单元素寻访,多元素寻访。

1,下标寻访(全下标方式)

matlab中矩阵的下标表示与常用的数学习惯相同:使用分别表示行和列的“双下标”,矩阵中的元素都有对应的第几行,第几列。这种表示方法简单直观,几何概念比较清晰。

例如我有一个矩阵:

 如果我想要输出矩阵的第三行第二个元素:6,那么我就需要写上矩阵的名字matrix加上小括号,小括号里面传入行的序号和列的序号(第一行第一列用(1,1)表示),因此输出元素6的语句如下:

 2,单元素寻址(单下标方式)

单元素寻址就是将矩阵看成一维的向量(扁平化)。依旧是之前的矩阵:

 如果我想要取出元素6,使用单下标的方式,就是矩阵名加上小括号,小括号内输入元素6横着数的序号6:

当矩阵数据较多,不能在较短时间内通过序号数到所要找的元素时,推荐通过行和列的表达式来找到对应元素的序号。假设一个矩阵为M \times N(M行N列),要找到第 m行第n列元素的序号sn则   sn=(n-1)*M+m

例如,我有一个十三行十列的矩阵

13\times10=130个元素,元素从1开始并递增(主要是为了方便查看计算结果是否正确)。

% 创建一个包含从 1 到 130 的向量
data = 1:130
% 将向量重塑为 13 行 10 列的矩阵
matrix = reshape(data, 13, 10)

 如果我要使用单下标的方式找到第十二行,第五列的元素64

那么,通过表达式可知:sn=(n-1)*M+m=(5-1)*13+12=64

所以元素64在扁平化的一维向量中的第64位。编写语句:matrix(64)

就可以通过单下标找到对应的元素。

再举一个矩阵的例子

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,对应的序号sn=(n-1)\times M+m=(5-1)\times 3+2=14
 

 通过单下标寻址得到元素 18 ↓

3,多元素寻址

多元素寻址的语法:

矩阵名[预查找行的起始位预查找行的结束位 预查找列的起始位预查找列的结束位 

例如我有一个三行十列的矩阵:
 接下来通过矩阵多元素寻址,包括寻址该矩阵的

  • 某一行或某一列的若干元素;
    ① 第二行的第三,四,五列的元素。行只需要一个数,列的位置放置两个数并用冒号分隔。

    ② 第二列的第一,二,三行的元素
  • 访问整行,整列元素;
    ①整个第二行

    ②整个第二列
  • 访问若干列和若干行的元素;
    ① 例如访问第二,四,六列的元素

    ※起始位和结束位中间的数是步长⭐,表示每两步取一组数。※

    ① 例如访问第一,二,三行的元素
  • 访问矩阵所有元素

有问题请在评论区留言或者是私信我,回复时间不超过一天。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455302.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本-函数

文章目录 一、函数介绍什么是函数、为什么使用函数、如何使用函数 二、shell脚本中如何定义函数Way1Way2Way3 三、shell脚本中如何调用函数四、shell脚本中使用内置变量(1、#、?、2等等)五、函数的返回值、shell脚本中函数的返回值函数的返回值概念shell脚本中函数的返回值ret…

梦金园三闯港交所上市:年营收200亿元,靠加盟模式取胜

近日,梦金园黄金珠宝集团股份有限公司(以下简称“梦金园”)向港交所递交IPO申请,中信证券为其独家保荐人。贝多财经了解到,这已经是梦金园第三次向港股发起冲击,此前曾于2023年9月、2024年4月两度递表。 继…

刷题 - 图论

1 | bfs/dfs | 网格染色 200. 岛屿数量 访问到马上就染色(将visited标为 true)auto [cur_x, cur_y] que.front(); 结构化绑定(C17)也可以不使用 visited数组,直接修改原始数组时间复杂度: O(n * m),最多将 visited 数…

Deepinteraction 深度交互:通过模态交互的3D对象检测

一.前提 为什么要采用跨模态的信息融合? 点云在低分辨率下提供必要的定位和几何信息,而图像在高分辨率下提供丰富的外观信息。 -->因此必须采用跨模态的信息融合 提出的原因? 传统的融合办法可能会由于信息融合到统一表示中的不太完美而丢失很大一部分特定…

磁珠的工作原理:【图文讲解】

1:什么是磁珠 磁珠是一种被动组件,用来抑制电路中的高频噪声。磁珠是一种特别的扼流圈,其成分多半为铁氧体,利用其高频电流产生的热耗散来抑制高频噪声。磁珠有时也称为磁环、EMI滤波器、铁芯等。 磁珠是滤波常用的器件&#xf…

SpringMVC常用注解

RequestMapping接口的映射,可以将HTTP请求映射到控制器方法上,通过这个注解使用不同的映射,就可以区分不同的控制器,其中RequestMapping中还有不同的属性,比如method,params,produces等在这里我…

快速搭建SpringBoot3+Prometheus+Grafana

快速搭建SpringBoot3PrometheusGrafana 一、搭建SpringBoot项目 1.1 创建SpringBoot项目 1.2 修改pom文件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://…

25年山东高考报名时间为10月23日-29日

今日&#xff0c;山东省招生考试院发布关于《山东省2025年普通高等学校招生考试报名工作的通知》 其中高考报名时间定为&#xff1a;2024年10月23日29日&#xff08;每天9&#xff1a;0018&#xff1a;00&#xff09; 资格审查时间为&#xff1a;10月30日~11月11日 网上缴费时间…

Android问题记录 - 适配Android Studio Ladybug/Java 21/AGP 8.0

文章目录 前言开发环境问题描述问题分析1. 适配Java 212. 适配AGP 8.0 解决方案补充内容最后 前言 Android Studio版本从Koala Feature Drop升级到Ladybug&#xff0c;出现了一系列报错。 开发环境 Flutter: 3.24.3Android Studio: 2024.2.1 Patch 1Java: 21.0.3Gradle: 7.4…

FPGA实现PCIE采集电脑端视频转SFP光口万兆UDP输出,基于XDMA+GTX架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案10G Ethernet Subsystem实现万兆以太网物理层方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机XDMA配置及使用XDMA中断模块FDMA图像缓存UDP视频组包发送UDP协议栈MAC…

高效改进!防止DataX从HDFS导入关系型数据库丢数据

高效改进&#xff01;防止DataX从HDFS导入关系型数据库丢数据 针对DataX在从HDFS导入数据到关系型数据库过程中的数据丢失问题&#xff0c;优化了分片处理代码。改动包括将之前单一分片处理逻辑重构为循环处理所有分片&#xff0c;确保了每个分片数据都得到全面读取和传输&…

Git文件操作指令和文件状态

一、Git 文件操作指令 1、查看指定文件的状态 git status [filename] 我们在新创建且初始化过后的 git 仓库中新建一个 文件&#xff0c;然后在 git 的命令行中输入此指令后&#xff0c;就可以看到 的状态&#xff1a; 在此显示的是 Untracked 的状态&#xff0c;也就是未…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

【pytorch DistributedDataParallel 及amp 使用过程遇到的问题记录 】

目录 环境问题单机多卡时&#xff1a;超时错误部分报错内容:解决方法: 存在没有使用梯度的参数报错内容:解决方法:方法1 找到不参与梯度计算的层**且**没有用处的层&#xff0c;删除方法2 DistributedDataParallel 增加参数:find_unused_parameters True DDP 训练时第一个batc…

2 两数相加

解题思路&#xff1a; \qquad 这道题可以用模拟很直观的解决&#xff0c;模式加法的计算过程&#xff0c;只不过套了一层链表的外衣。题目给出的数字在链表中是按照逆序排列的&#xff0c;即链表头节点的值代表相加数字的个位&#xff0c;这样只需要从链表头开始计算加法即可得…

系统登录接口文档Demo

接口描述 该接口用于用户登录验证。通过用户名和密码进行身份验证&#xff0c;成功后返回一个用于后续请求的认证 token。这个 token 是访问受保护资源的凭证。 时序图&#xff1a; 登录请求&#xff1a; 登录查询接口: POST {url}/api/user/login 请求体: {"username…

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…

Linux:进程优先级 进程调度切换 调度算法

#1024程序员节&#xff5c;征文# 目录 1.进程优先级 1.1 概念 1.2 为什么有优先级 1.3 Linux进程优先级 2. 概念预备 2.1 并发 2.2 寄存器 主要类型&#xff1a; 2. 进程的调度与切换 3.1 进程调度 3.2 进程切换 4. 调度算法 4.1 runqueue内部结构 4.2 如何调度…

Git使用GUI界面实现任意历史版本对比

首先进入版本历史查看界面 标记某次提交 选择某次提交并和标记的提交对比 可以查看比较结果了&#xff0c;具体到每一个文件每一行代码

一篇文章快速认识 YOLO11 | 目标检测 | 模型训练 | 自定义数据集

本文分享YOLO11的目标检测&#xff0c;主要内容是自定义数据集、数据标注、标签格式转换、模型训练、模型推理等。 目录 1、数据标注 2、Labelme的json转为YOLO的txt 3、配置YOLO11代码工程 4、数据集yaml配置文件 5、YOLO11模型结构配置文件 6、编写训练代码 7、开始训…