MATLAB R2020a自学归纳总结-MATLAB基础知识(2)

2.1.5 结构体类型

        MATLAB中的结构体与C语言中的结构体类似, 一个结构体可以通过字段存储多个不同类型的数据。因此, 结构体相当于一个数据容器, 把多个相关联的不同类型的数据封装在一个结构体对象中。
        如图2-1所示, 结构体student中有4个字段, 姓名字段name中存储了一个字符串类型的数据; 年级字段grade中存储了一个浮点数值; 科目字段subject中存储了一个一维字符串数组; 成绩字段result中存储了一个一维数组。

                                                图2-1 结构体student的示意图
        一个结构体中可以有多个字段, 每个字段又可以存储不同类型的数据, 通过这种方式就把多个不同类型的数据组织在一个结构体对象中。
        创建结构体对象的方法有两种, 可以直接通过赋值语句给结构体的字段赋值, 也可以使用结构体创建函数struct。 两种方法的具体操作步骤如下。
        (1) 通过字段赋值创建结构体。 在对结构体的字段进行赋值时, 赋值表达式的变量名使用“结构体名称.字段名称”的形式书写, 对同一个结构体可以进行多个字段的赋值。


         在上例中, 通过对4个字段赋值, 创建了结构体对象Student, 然后用whos函数分析出Student是一个1×1的结构体数组。
○注意
        在进行字段赋值操作时, 没有明确赋值的字段, MATLAB默认赋值为空数组。 通过圆括号索引进行字段赋值, 还可以创建任意尺寸的结构体数组。 需要注意的是, 同一个结构体数组中的所有结构体对象具有相同的字段组合。

2.1.6 数组类型

        在MATLAB中进行运算的所有数据类型, 都是按照数组及矩阵的形式进行存储和运算的, 二者在MATLAB中的基本运算性质不同, 数组强调元素对元素的运算, 而矩阵则采用线性代数的运算方式。 本节主要介绍数组类型, 关于矩阵的详细运算语法在第3章中讲解。
        数组的属性及数组之间的逻辑关系, 是编写程序时非常重要的两个方面。 在MATLAB平台上, 数组的定义是广义的, 数组的元素可以是任意数据类型, 例如可以是数值、 字符串、 指针等。
        利用数组的构建方法可以直接对变量进行赋值。

创建从i开始、 步长为j、 到k结束的数字序列, 即i,i+j,i+2j,…,k。 如果j=0, 则返回一个空矩阵。 数字i、 j和k不必是整数, 该序列的最后一个数小于或等于k。
还有一些预定义函数也可以用来创建线性序列和逻辑序列。

2.1.7 单元数组类型

1. 概述
        单元(Cell) 数组是一种无所不包的广义矩阵。 组成单元数组的每一个元素称为一个单元。 每一个单元可以包括一个任意数组, 如数值数组、 字符串数组、 结构体数组或另外一个单元数组, 因而每一个单元可以具有不同的尺寸和内存占用空间。
○注意
和一般的数值数组一样, 单元数组的维数不受限制, 可以是一维、 二维或多维。
MATLAB中使用单元数组的目的在于, 它可以把不同类型的数据归并到一个数组中。
○注意
单元数组的创建有两种方法: 使用赋值语句创建单元数组和利用cell函数创建空单元数组。
        (1) 使用赋值语句创建单元数组。 与一般数组有所不同的是, 单元数组使用花括号“{}”来创建, 使用逗号“,”或空格来分隔每一个单元, 使用分号“;”来分行。
例2-18: 创建单元数组。
在命令行窗口中输入:

同一般的数值数组一样, 单元数组的内存空间也是动态分配的。 因此, 使用cell函数创建空单元数组的主要目的是为该单元数组预先分配连续的存储空间, 以节约内存占用, 提高执行效率。
2. 单元数组的寻访
        在单元数组中, 单元和单元中的内容是两个不同范畴的东西, 因此, 寻访单元和单元中的内容是两种不同的操作。 MATLAB为上述两种操作设计了相对应的操作对象: 单元外标识(Cell Indexing) 和单元内编址(Content Addressing) 。
        对于单元数组C, C(m,n)指的是单元数组中第m行第n列的单元, 而C{m,n}指的是单元数组中第m行第n列单元中的内容。
例2-20: 单元数组的寻访。
在命令行窗口中依次输入以下命令:

3. 单元数组的操作
单元数组的操作包括合并、 删除单元数组中的指定单元、 改变单元数组的形状等。
(1) 单元数组的合并。
例2-21: 单元数组的合并。
在命令行窗口中依次输入以下命令:

该函数将单元数组C改变成一个具有M行N列的新单元数组。
例2-23: 将例2-22中的单元数组C(1×4) 改变成newC(4×1) 。
在命令行窗口中输入:

2.1.8 map容器类型

1. map容器类型及map类概述
        map的本意是映射, 就是可以将一个量映射到另一个量。 比如将一个字符串映射为一个数值, 则该字符串就是map的键(key) , 数值就是map的数据(value) 。 因此, 可以将map容器理解为一种快速查找数据结构的键。
对一个map元素进行寻访的索引称为“键”。 一个键可以是以下任何一种数据类型:
● 1×N字符串。
● 单精度或双精度实数标量。
● 有符号或无符号标量整数。
        这些键和其对应的数据存储在map中。 一个map的每一个条目都包括唯一的键和相对应的数据。 map中存储的数据可以是任何类型的, 包括数值类型、 字符或字符串类型、 结构体类型、 单元类型或其他map。
        一个map是MATLAB类的一个对象。 map类的所有对象具有3种属性, 如表2-10所示。 用户不能直接对这些属性进行修改, 但可以通过作用于map类的函数进行修改。
表2-10 map类的属性

map类的属性的查看方法为map名+小数点“.”+map的属性名。 例如, 为了查看mapW对象包括的数据类型, 需要使用mapW.ValueType。
2. 创建map对象
map是一个map类中的对象, 由MATLAB中名为“容器”的一个包来定义, 可以通过构造函数来创建, 其创建方法如下:

此外, map对象的创建可以分为两个步骤: 首先创建一个空map对象; 然后使用keys和values方法对其内容进行补充。 空map对象的创建方法如下:

3. 查看/读取map对象
(1) 查看map对象。
map对象中的每个条目包括两个部分: 一个唯一的键及其对应的值。 可以通过使用keys函数查看map对象中包含的所有键; 通过values函数查看所有的值。
例2-25: 查看例2-24中创建的map对象。
在命令行窗口中依次输入:

(2) 读取map对象。
在创建好一个map对象后, 用户可以对其进行数据的寻访。 寻访指定键(keyName) 所对应的值
(valueName) 使用的格式如下:


当键名是一个字符串时, 需使用单引号将键名括起来。
例2-26: 通过使用键名访问例2-24中创建的schedulemap对象中的内容。
在命令行窗口中输入:

结果弹出如下错误信息:
警告: 冒号操作数必须为实数标量。
4. 编辑map对象
(1) 从map对象中删除keys/values对。
用户可以使用remove函数从map对象中删除keys/values对, 该函数的调用格式为:


式中, mapName和keyName分别为map对象名称及需要删除的键名。 执行该命令后, MATLAB系统删除指定的键名及其相对应的值。

例2-27: 删除schedulemap对象中的“星期四”及其对应的科目。
在命令行窗口中依次输入:
 (2) 添加keys/values对。
当用户向一个map对象中写入新元素的值时, 需要提供键名, 而且该键的类型必须和map中的其他键一致。 该操作的调用格式为:

( 3) 修改keys。
        如果需要在保持值不变的情况下对键名进行更改, 则首先要删除键名和其对应的值, 然后再添加一个有正确键名的新条目。
        例2-29: 根据例2-28中的schedulemap对象的结果, 修改“星期六”及其对应的科目“公共选修课”为“星期天”及其对应的科目“MBA”。
        在命令行窗口中依次输入:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值