第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程)

这篇具有很好参考价值的文章主要介绍了第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​

MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili

在文本数据预处理阶段,我们通常需要对字符串数组进行基本的操作。我们将从字符串数组的引用开始,逐步探索它们的修改和删除方法。紧接着,我们将学习如何有效地拼接和重构字符串数组,以便它们能够适应更加复杂的数据处理需求。

(1)引用字符串数组

在MATLAB中,有两种方式引用字符串数组:使用小括号()和使用大括号{}引用。这两种引用方式和元胞数组的引用方式非常相似,下面我们来看例子:

使用小括号()引用返回的是字符串类型:引用单个位置的元素返回的是一个字符串标量;引用多个位置的元素返回的是一个字符串数组。具体引用方式类似于数值数组:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

使用大括号{}引用返回的是字符向量类型:返回的结果类似于对字符向量元胞数组使用大括号进行引用。(拓展:你也可以使用char函数将字符串类型转换为字符数组类型)

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

当然,我们也可以使用链式索引。和元胞数组的引用类似,使用链式索引时如果用到了小括号(),那它需要被放置在索引表达式的末尾。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

拓展:如何反转字符串中的字符顺序?

对于字符向量,反转字符顺序非常容易:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

然而,上述这些方法对字符串都失效了:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

为什么MATLAB会返回和s2相同的结果呢?这是因为s2是一个字符串标量,它是一个整体。如果是一个字符串向量,则会颠倒向量中各字符串元素的位置:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

因此,使用end:-1:1进行索引,只会将字符串数组中的元素顺序进行反转。要想对字符串中的字符顺序进行反转,有以下两种解决方法:

(1)先将字符串转换为字符向量,然后再进行反转:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

这样得到的结果是一个字符向量类型,如果你希望结果也是字符串类型,你可以套用一个string函数:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

上面的s2是一个字符串标量,如果我们想对一个字符串数组中的所有字符串标量分别进行反转,应该如何操作呢?此时我们可以考虑使用循环语句。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

首先,我们使用strings函数初始化一个和s3相同大小的空的字符串数组ss,用来保存结果。在循环体内,我们使用大括号{}依次取出s3中的每个元素,将其反转后再转换回字符串类型。注意:代码中对ss的第ii个位置元素进行了修改,后文还会详细介绍字符串数组的修改。显然,这种方法写起来很麻烦也不容易理解,因此下面我们介绍一种更好用的方法。

(2)使用reverse函数

reverse函数在2016b版本中推出,它能反转文本中的字符顺序。它支持字符向量、字符向量元胞数组以及字符串数组类型:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

(2)修改和删除字符串数组

在MATLAB中,字符串数组的修改和删除操作与元胞数组类似,支持小括号()和大括号{}两种不同的方式。

修改操作:

使用小括号()修改字符串数组时,等号右侧的值可以是字符串、字符向量或字符向量元胞数组,只要大小兼容即可。这种修改方式的灵活性使得修改字符串数组成为一项简单且直观的任务。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

然而,当使用大括号{}对字符串数组的元素进行修改时,等号右侧的值只能是字符向量。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

因此,在实际操作中,使用小括号()进行字符串数组的修改是更为常见和方便的做法。

删除操作:

要删除字符串数组中的元素,可以将等号右侧改为空向量[]。

使用小括号()进行删除操作时会改变数组中元素的数量;使用大括号{}则不会改变数组中元素的数量,被删除的位置元素会被缺失字符串代替。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

拓展:缺失字符串<missing>在MATLAB字符串数组中的功能类似于数值数组中的NaN,它标示着某个位置的字符串值是缺失的。这种机制在处理包含不完整数据的字符串数组时非常有用。后续章节我们会专门讲解MATLAB的数据分析,到时候会介绍缺失值的处理方法。

拓展:使用加号(+)连接字符串数组

在 MATLAB 中,我们可以使用加号(+)对字符串数组进行操作。这种方法类似于数值数组的加法运算,但在字符串数组中,它被用于连接字符串元素。以下是一些示例,展示了如何在不同情况下使用加号(+)连接字符串数组:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

从上面的例子可以看出,对字符串数组使用加法运算非常方便,也非常灵活。下面我们来看一道综合性较强的例子:随机生成新生儿的姓名。

变量s1和s2如下所示,它们分别表示姓氏和名字,请将姓氏和名称两两组合,生成所有可能的姓名,然后从中随机抽取10个互不相同的姓名保存到一个字符串向量中。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

思路:首先要从s1和s2中分别提取姓氏和名字,并将提取的结果分别保存到两个字符串向量中;如果提取后的一个字符串向量为行向量、另一个字符串向量为列向量,那么就可以利用字符串加法运算的兼容模式得到所有组合后的姓名;最后我们可以借助第三章课后习题中介绍的randperm函数从所有可能的姓名中随机抽取10个互不相同的姓名。

代码如下:

%  s1和s2同上
s1 = s1{:}(isletter(s1));  % 借助isletter函数生成逻辑索引(这里用到了链式索引)
%  '王李张刘陈杨黄周胡赵'
s1 = string(s1');  % 将上一步得到的s1转置后,再转换为字符串类型
%  s1: 10×1 string 数组  [ "王"; "李";  ...  "胡"; "赵"]
s2 = strsplit(s2,'、');  % 使用strsplit函数对s2进行拆分,得到一个行字符串向量
%  s1: 1×12 string 数组 [ "辰" "瑞"  ...  "浩然" "奕泽"]
name = s1 + s2  % 利用加法的兼容性得到所有的名字
%  name: 10×12 string 数组
ind = randperm(numel(name),10); % 从1-numel(name)的序列中随机抽取10个作为索引
name10 = name(ind)  % 使用ind索引从name中抽取10个姓名(ind实际上是线性索引)

(3)字符串数组的拼接、重构、重复和排序

下面我们来介绍如何对字符串数组进行拼接、重构、重复以及排序操作。这些操作对于数据预处理、文本分析和其他需要灵活处理字符串的场景至关重要。

拼接操作:

字符串数组的拼接方式和数值数组非常相似,我们既可以使用中括号[]进行拼接,还可以借助cat、horzcat和vertcat函数进行拼接。另外,拼接的文本类型除了字符串之外,也支持字符向量、字符向量元胞数组、数值数组等,MATLAB会自动将它们转换成字符串类型,这一操作类似于我们前面介绍的混合创建字符串数组。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

重构操作:

重构操作(又称重塑操作)是指更改数组的形状或维度,同时保留其数据内容。我们可以使用reshape函数对字符串数组进行重构操作。它的用法非常简单,我们来看一个例子:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

重复操作:

在第三章矩阵操作中,我们介绍过repmat函数和repelem函数,它们分别用于对数组整体进行堆叠和对数组中的元素进行重复。这两个函数也适用于字符串数组,我们来看例子:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

排序操作:

第三章中我们介绍过两个排序函数,分别是sort函数和sortrows函数。其中,sort函数通常用于对向量进行排序,sortrows函数则基于矩阵的某一列对矩阵进行排序,排序后得到的新矩阵的同一行元素不会改变。

这两个函数也适用于字符串数组。以升序排列为例,字符串在排序时是逐字符进行比较的,对于每一对比较的字符,它们的Unicode编码被用来确定排序顺序,Unicode编码较小的字符会被排在前面。如果一个较短的字符串的所有字符和另一个更长的字符串的前面字符完全相同,那么这个较短的字符串排在前面。

下面来看例子:

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构

排序结果 sort_s 是基于每个字符串元素的 Unicode 字符编码进行排序的。具体解释如下:

  • " z" 排在最前面,因为它以空格字符开始,而空格的 Unicode 编码小于任何字母或数字的编码。
  • "123" 排在 " z" 之后,因为数字的 Unicode 编码小于字母的编码。
  • 接下来是 "A" 和 "Bc",由于大写字母的 Unicode 编码小于小写字母,它们排在小写字母前。
  • "aa", "ab", "abc", "ac", "ba", "bad"都是小写字母开始的字符串,且按照字母的 Unicode 编码顺序排列。

索引数组 ind 中的每个值表示排序后的数组sort_s中对应位置的元素在原始数组 s 中的位置。例如,ind(1) = 4 意味着sort_s中第一个元素 " z" 是原始数组 s 中的第4个元素;同样,ind(2) = 6 表示sort_s中的第二个元素 "123" 是原始数组 s 中的第6个元素;依次类推。

另外,我们也可以对字符串数组使用sortrows函数。

下面来看一个例子,这个例子中的字符串数组s是我们随机生成的,它有4行3列,数组中的每个元素都是在字符集  'a',  'b',  'c',  'd'  中随机抽取两个拼接而成的字符串标量。

第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数据结构


  点击下方的CSDN专栏阅读下一篇文章:

MATLAB入门课程专栏文章来源地址https://www.toymoban.com/news/detail-795543.html

到了这里,关于第5章:5.4.2 字符串数组的基本操作(MATLAB入门课程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • matlab字符串的操作方法

    一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符,字符串可以由0个或多个字符组成。下面是一些字符串的操作方法 (1)字符串的创建 MATLAB中创建字符串非常简单,将字符串中的字符放到一对单引号之间即可。该对单引号必须在英文状态下

    2024年02月08日
    浏览(34)
  • 第5章:5.4.4 字符串数组的配套函数 (MATLAB入门课程)

    ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili MATLAB自2016b版本正式引入字符串类型起,其文本处理能力就得到了进一步提升。为了增强字符串数组的操控性

    2024年02月02日
    浏览(30)
  • 第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程)

    讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 在本章5.2和5.3两个小节中,我们详细介绍了字符数组和元胞数组在文本数据处理中的应用。本节我们将重点学

    2024年02月01日
    浏览(36)
  • 第5章:5.4.5 字符串数组的综合练习(MATLAB入门课程)

    ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 案例 1 : 下表左侧给出了四名同学在三次测试中的成绩数据,请对所有同学的测试成绩进行排名,并生成一

    2024年01月24日
    浏览(32)
  • 【玩转Linux操作】详细讲解shell的注释,变量,字符串,数组等操作

    🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用

    2024年02月11日
    浏览(34)
  • 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作

    题目描述: 1.程序要求:实现对5个数(a[0]~a[4],数组元素从键盘读入)进行从大到小起泡法排序。输入第一组数据:1 2 3 4 5;输入第二组数据:3 5 4 1 2;验证程序的正确性。 题目描述: 2.程序要求:实现三阶方阵转置,并打印转置后的方阵。 测试主函数为: int main() { in

    2024年02月15日
    浏览(33)
  • Js水几个基础知识点:数组的操作,字符串和数组之间的互转,持续补充,欢迎关注

    一、插入 / 删除元素: 我们就不从创建开始讲了,那个太基础了,js创建数组一般都直接let arr = […,…,…],有部分仁兄喜欢new Array(…, …, …),这样看起来可能高级点,结果是一样的哈。 这里我们直接来讨论插入元素: 1、在末尾插入 / 删除元素(push / pop,操作原数组)

    2024年02月09日
    浏览(42)
  • 【数据结构】数组和字符串(十):稀疏矩阵的链接存储:十字链表的矩阵操作(加法、乘法、转置)

    【数据结构】数组和字符串(一):矩阵的数组表示   矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造

    2024年02月08日
    浏览(43)
  • mysql 解析json字符串、数组字符串、json数组字符串

    笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不太喜欢用这种手段,因为他们比较低效。于是我想这里总结一下

    2024年02月16日
    浏览(32)
  • JS中字符串切割为数组/数组拼接为字符串

    (1)语法格式: 其中所选分隔符使用双引号(“”)或者单引号(‘’)括起来; 所生成的数组会存放于前面定义的数组变量中。 (2)样例: JS代码: 运行结果: (3)其他用法: ①当所选分隔符为空时,返回的数组即将每个字符分割出来: JS代码: 运行结果: ②分隔

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包