matlab使用教程(4)—数组类型

news2024/11/25 0:26:44

1多维数组

        MATLAB 环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros ones rand randn 。例如,
R = randn(3,4,5);
        创建一个 3×4×5 数组,共包含 3*4*5 = 60 个正态分布的随机元素。
        三维数组可表示在矩形网格中采样的三维物理数据,例如室内温度。或者也可以表示矩阵序列 A(k) 或与时间相关的矩阵示例 A(t)。在下面的示例中,第 k 个或第 t k 个矩阵的第 (i, j) 个元素由 A(i,j,k) 表示。MATLAB 与丢勒的 4 阶幻方矩阵版本的区别在于交换了两个列。通过交换列,可以生成许多不同的幻方矩阵。语句
p = perms(1:4);
        生成 4! = 24 置换 1:4 。第 k 个置换为行向量 p(k,:) 。然后,
A = magic(4);
M = zeros(4,4,24);
for k = 1:24
M(:,:,k) = A(:,p(k,:));
end
        将含有 24 个幻方矩阵的序列存储在三维数组 M 中。 M 大小为
size(M)
ans =
4 4 24
        注意 此插图中显示的矩阵顺序可能不同于您的结果。 perms 函数始终返回输入向量的所有置换,但置换顺序可能因不同 MATLAB 版本而异。
语句
sum(M,d)
        通过改变第 d 个下标来计算总和。因此
sum(M,1)
是一个含有 24 个行向量副本的 1×4×24 数组 34 34 34 34
sum(M,2)
是一个含有 24 个列向量副本的 4×1×24 数组
34
34
34
34
最后,
S = sum(M,3)
        在序列中添加 24 个矩阵。结果的大小为 4×4×1,因此它看似是 4×4 数组:
S =
204 204 204 204
204 204 204 204
204 204 204 204
204 204 204 204

2元胞数组

        MATLAB 中的元胞数组是以其他数组的副本为元素的多维数组。使用 cell 函数可以创建空矩阵的元胞数组。但是,更普遍的做法是,通过将其他内容的集合括入花括号 {} 中来创建元胞数组。花括号还可以与下标配合使用,以便访问各个元胞的内容。例如,
C = {A sum(A) prod(prod(A))}
        生成一个 1×3 元胞数组。这三个元胞包含幻方矩阵、列总和的行向量及其所有元素的乘积。当显示 C 时,您会看到
C =
[4x4 double] [1x4 double] [20922789888000]
        这是因为前两个元胞太大,无法在此有限空间中输出,但第三个元胞仅包含 16! 一个数字,因此有空间可以输出此数字。请牢记以下两大要点。第一,要检索某个元胞的内容,请在花括号中使用下标。例如, C{1} 检索幻方矩阵, C{3} 为 16!。第二,元胞数组包含其他数组的副本,而不包含指向这些数组的指针。如果随后更改A C 不会发生变化。
        使用三维数组可以存储相同大小的矩阵序列。元胞数组可用于存储不同大小的矩阵序列。例如,
M = cell(8,1);
for n = 1:8
M{n} = magic(n);
end
M
        生成具有不同顺序的幻方矩阵序列:
M =
[ 1]
[ 2x2 double]
[ 3x3 double]
[ 4x4 double]
[ 5x5 double]
[ 6x6 double]
[ 7x7 double]
[ 8x8 double]
        使用以下命令可以检索 4×4 幻方矩阵
M{4}

3字符与文本

        使用单引号在 MATLAB 中输入文本。例如,
s = 'Hello'
        其结果与您目前已学过的数值矩阵或数组不属于同一类型,而是一个 1×5 字符数组。字符在内部作为数字存储,而不会采用浮点格式存储。语句
a = double(s)
        将字符数组转换为数值矩阵,该矩阵包含每个字符的 ASCII 代码的浮点表示。结果为
a =
72 101 108 108 111
语句
s = char(a)
        是刚才转换的逆转换。

将数字转换为字符可以调查计算机上的各种可用字体。基本 ASCII 字符集中的可打印字符由整数 32:127 表示。(小于 32 的整数表示不可打印的控制字符。)这些整数使用以下语句按相应的 6×16 数组的形式排列

F = reshape(32:127,16,6)';
        扩展 ASCII 字符集中的可打印字符由 F+128 表示。将这些整数解释为字符时,结果取决于当前使用的字体。键入语句
char(F)
char(F+128)
        然后改变命令行窗口所用的字体。要更改字体,请在主页 选项卡上的 环境 部分中,点击 预设 > 字体。如果代码行中包含制表符,请使用等宽字体(例如, Monospaced)以便在不同行中对齐制表符位置。使用方括号进行串联可将文本变量联接到一起。语句
h = [s, ' world']
        水平联接字符并生成
h =
Hello world
语句
v = [s; 'world']
垂直联接字符并生成
v =
Hello
world
        请注意,必须在 h 中的 'w' 前插入一个空格,并且 v 中的两个单词的长度必须相同。生成的数组均为字符数组; h 为 1×11,v 为 2×5。要操作包含不同长度的行的文本主体,您有两种选择,即使用填充的字符数组或使用字符向量元胞数组。创建字符数组时,数组各行的长度必须相同。(使用空格填充较短行的末尾。) char 函数可执行这种填充操作。例如,
S = char('A','rolling','stone','gathers','momentum.')
生成一个 5×9 字符数组:
S =
A
rolling
stone
gathers
momentum.
        再者,您也可以将文本存储在元胞数组中。例如,
C = {'A';'rolling';'stone';'gathers';'momentum.'}
        创建一个不需要任何填充的 5×1 元胞数组,因为该数组的各行可以具有不同的长度:
C =
'A'
'rolling'
'stone'
'gathers'
'momentum.'
        使用以下语句可以将填充后的字符数组转换为字符向量元胞数组:
C = cellstr(S)
使用以下语句可以逆转此过程
S = char(C)

4结构体     

        结构体是多维 MATLAB 数组,包含可按文本字段标志符访问的元素。例如,
S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'
        创建一个具有三个字段的标量结构体:
S =
name: 'Ed Plum'
score: 83
grade: 'B+'
        与 MATLAB 环境中的所有其他内容一样,结构体也为数组,因此可以插入其他元素。在本示例中,数组的每个元素都是一个具有若干字段的结构体。可以一次添加一个字段,
S(2).name = 'Toni Miller';
S(2).score = 91;
S(2).grade = 'A-';
        也可以使用一个语句添加整个元素:
S(3) = struct('name','Jerry Garcia',...
'score',70,'grade','C')
        现在,结构体非常大以致仅输出摘要:
S =
1x3 struct array with fields:
name
score
grade
        将不同字段重新组合为其他 MATLAB 数组的方法有许多种。这些方法大多基于逗号分隔列表的表示法。键入
S.score
与键入
S(1).score, S(2).score, S(3).score
        相同,这是一个逗号分隔列表。如果将生成此类列表的表达式括在方括号中,MATLAB 会将该列表中的每一项都存储在数组中。在本示例中,MATLAB 创建一个数值行向量,该向量包含结构体数组 S 的每个元素的 score 字段:
scores = [S.score]
scores =
83 91 70
avg_score = sum(scores)/length(scores)
avg_score =
81.3333
        要根据某个文本字段(例如,name )创建字符数组,请对 S.name 生成的逗号分隔列表调用 char 函数:
names = char(S.name)
names =
Ed Plum
Toni Miller
Jerry Garcia
        同样,通过将生成列表的表达式括入花括号中,可以根据 name 字段创建元胞数组:
names = {S.name}
names =
'Ed Plum' 'Toni Miller' 'Jerry Garcia'
        要将结构体数组的每个元素的字段赋值给结构体外部的单独变量,请指定等号左侧的每个输出,并将其全部括在方括号中:
[N1 N2 N3] = S.name
N1 =
Ed Plum
N2 =
Toni Miller
N3 =
Jerry Garcia

5动态字段名称

        访问结构体中的数据的最常用方法是指定要引用的字段的名称。访问结构体数据的另一种方法是使用动态字段名称。这些名称将字段表示为变量表达式,MATLAB 会在运行时计算这些表达式。此处显示的点-括号语法将 expression 作为动态字段名称:
structName.(expression)
        使用标准 MATLAB 索引语法创建此字段的索引。例如,要在字段名称中计算 expression ,并在行 7 中的1 25 列内获取该字段的值,请使用
structName.(expression)(7,1:25)

        下面显示的 avgscore 函数可用于计算考试的平均分数,并使用动态字段名称检索 testscores 结构体中的信息:

function avg = avgscore(testscores, student, first, last)
for k = first:last
scores(k) = testscores.(student).week(k);
end
avg = sum(scores)/(last - first + 1);
        您可以运行此函数,并对动态字段 student 使用不同值。首先,对包含 25 周内的分数的结构体进行初始化:
testscores.Ann_Lane.week(1:25) = ...
[95 89 76 82 79 92 94 92 89 81 75 93 ...
85 84 83 86 85 90 82 82 84 79 96 88 98];
testscores.William_King.week(1:25) = ...
[87 80 91 84 99 87 93 87 97 87 82 89 ...
86 82 90 98 75 79 92 84 90 93 84 78 81];
现在,运行 avgscore ,并在运行时使用动态字段名称为 testscores 结构体提供学生姓名字段:
avgscore(testscores, 'Ann_Lane', 7, 22)
ans =
85.2500
avgscore(testscores, 'William_King', 7, 22)
ans =
87.7500

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库端口操作指南

数据库端口主要功能是允许用户通过从这些数据库端口推送或拉取数据,从而将各种数据库集成到用户的数据流中。 打开知行之桥 EDI 系统,在工作流界面右侧可以看到端口选项卡下有众多端口,我们打开数据库分类,可以看到知行之桥 EDI 系…

Linux文件处理命令

目录: linux系统与shell环境准备linux常用命令之文件处理Linux系统登录与文件操作 1.linux系统与shell环境准备 Linux 系统简介: Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而…

电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。化实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了…

如何使用Spring Boot实现分页和排序?

使用Spring Boot实现分页和排序需要借助Spring Data JPA。Spring Data JPA是Spring Data项目中的一个模块,提供了简化数据访问层的功能,包括分页和排序。 接下来我们通过一段Java代码,展示如何使用Spring Data JPA和Spring Boot实现分页和排…

电压放大器在超声波焊接中的作用以及应用

电压放大器是一种运用于电子设备中的信号放大器,主要作用是将小信号放大为更高幅度的信号。在超声波焊接中,电压放大器起到了重要的作用,它可以将从传感器采集到的微小信号放大为能够被检测和处理的合适大小的信号。 超声波焊接是现代工业生产…

畅游NLP海洋:HuggingFace的快速入门

目录 前言一、HuggingFace介绍1-1、HuggingFace的介绍1-2、安装 二、Tokenizer分词库:分词工具2-0、加载BertTokenizer:需要传入预训练模型的名字2-1、使用Tokenizer对句子编码:2-2、使用增强Tokenizer对句子编码:2-3、批量编码单…

事件传播机制和事件委托

DOM事件流 DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从…

数字孪生系统为何开始尝试融合GIS系统?

数字孪生是一种通过数字模型实时仿真现实世界的技术,而GIS(地理信息系统)则是用于收集、存储、处理和展示地理数据的工具。将数字孪生系统与GIS系统进行融合,可以为各行业带来诸多优势和创新。那么数字孪生系统如何将GIS系统进行融…

Java线程相关

线程优先级 在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的…

[javascript核心-08] V8 内存管理机制及性能优化

V8 内存管理 V8 本身也是程序,它本身也会申请内存,它申请的内存称为常驻内存,而它又将内存分为堆和栈 栈内存 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针栈空间是连续的,增加删除只需要移动指针,操作速度…

自动收小麦机(牛客2023萌新)

题目链接 示例1 输入 复制 4 1 2 1 1 4 5 2 2 2 3 4 输出 复制 10 说明 在第4格放出水流后,水流会流向第3格,由于第3格高度比第4格低,所以水流继续向左流向第2格,因为平地水流只能流2格,所以到达第2格后水流停…

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

目录 基础知识: 中缀表达式和后缀表达式(逆波兰式) 中缀表达式转后缀表达式 后缀表达式求结果 有效括号 栈的压入,弹出序列 最小元素栈 基础知识: 栈:是一种先入后出的数据结构,它的底层是由数组实现的 入栈:push(),出栈pop(),查看栈顶元素peek() 中缀表达式和后缀表…

docker-compose搭建prometheus+grafana+钉钉告警

前言: 本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态; 配合granfana面板构建监控大屏; 由于grafana的报警不是很友好,使用dingtalk,配合altermanager,实现钉钉报警。 …

Crosswalk App UI 自动化

目录 前言: Crosswalk WebDriver 实现 Crosswalk app UI 自动化实现 前言: Crosswalk是一个基于Chromium的开源项目,它提供了一个跨平台的应用程序运行时环境,可以帮助开发人员在移动设备上构建高性能的Web应用程序。在Crossw…

“体验家”亮相第六届IAIC成都国际医美产业大会

6月23日-25日,第六届IAIC成都国际医美产业大会暨“医美之都”高峰会议在成都世纪城国际会议中心成功举行。本次大会邀请了来自国家药品监督管理局、部分省市地区的相关领导莅临指导,以及来自全国100医美行业头部平台,近2000位医美产业领军代表…

关于前后端JSON解析差异问题与思考

目录 一、问题回顾 二、问题思考 2.1 JavaScript如何解析json字符串 2.2 Java如何解析json字符串 2.3 Java和JavaScript交互如何出现JSON解析问题 三、经验总结 本文主要总结了作者在一次涉及流程表单的需求发布中遇到的问题及思考总结。 一、问题回顾 在一次涉及流程表…

FPGA驱动SPI屏幕(附完整工程)

一. 简介 相信大家都玩过屏幕,在FPGA上使用最多的就是VGA/HDMI接口的显示器了,这两种显示器的优点就不用说了,缺点就是体积比较大,而且价格比较贵,对于追求便携/价格低的我来说,SPI接口的屏幕才是我的首要…

实战操作接口自动化测试

最近接到一个接口自动化测试的case,并展开了一些调研工作,最后发现,使用pytest测试框架并以数据驱动的方式执行测试用例,可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

文件IO_文件截断_ftruncate,truncate(附Linux-5.15.10内核源码分析)

目录 1.为什么需要文件截断? 2.truncate函数介绍 2.1 truncate函数 2.2 truncate函数内核源码分析 2.3 truncate函数使用示例 3.ftruncate函数介绍 3.1 ftruncate函数 3.2 ftruncate函数内核源码分析 3.3 ftruncate函数使用示例 3.4 ftruncate和文件偏移量…

8年测试总结,App自动化测试-Appium常遇问题+解决(详细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 问题1&#xff1a…