第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程)

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

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

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

5.4 字符串数组

在本章5.2和5.3两个小节中,我们详细介绍了字符数组和元胞数组在文本数据处理中的应用。本节我们将重点学习字符串数组,这是MATLAB在2016b版本中引入的一种新的数据类型,对于用户而言,熟练掌握字符串数组的使用将会大大提升文本数据处理能力、增加代码运行的效率。

以下这段文字来自MATLAB官网,它介绍了字符串数组的发展历史:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

从这段文字可以看出, MATLAB的字符串数组自2016b版本引入后,经历了三个发展阶段:最初,字符串数组作为一种新的数据类型,专为文本处理而设计,支持了索引、重构、拼接等标准数组操作;随后在2017a版本中,MATLAB简化了字符串数组的创建过程,允许用户直接使用双引号创建字符串,极大地提高了字符串数组的易用性;到了2018b版本,字符串数组的应用范围大幅拓展,几乎涵盖了所有产品,显示出其在MATLAB文本处理中的核心地位。(注意:如果你安装的MATLAB版本低于2018b,那么在某些函数中使用字符串类型作为输入参数可能会报错,例如我们上一章学的input、warning和error函数。因此本课程建议大家安装的MATLAB版本尽量高一点,详细的安装建议可以看本书的第一章)

在本节中,我们将深入探索MATLAB中的字符串数组,并详细介绍如何有效地利用这一强大的文本数据类型。具体内容包括  :

  1. 字符串数组的创建方法:本节将介绍如何利用双引号快速创建字符串数组,以及如何将其他数据类型转换为字符串数组的方法。
  2. 字符串数组的基本操作:本节将详细介绍字符串数组的引用、修改、删除、拼接、重构等基本操作。
  3. 字符串数组的运算方法:本节将学习字符串数组的运算方法,主要讲解关系运算和集合运算。
  4. 字符串数组的配套函数:伴随着字符串数组类型的发布,MATLAB在2016b版本中也推出了许多配套的字符串处理函数,这些函数涵盖文本处理的方方面面。因此,这一小节是我们需要重点学习的部分,熟练掌握这些新推出的函数将大大提高文本处理效率。
  5. 字符串数组的综合练习:最后,通过具体案例展示字符串数组在文本数据处理和分析中的实际应用,突出其在实际应用场景中的实用性。

5.4.1 字符串数组的创建方法

从MATLAB2017a版本开始,我们可以使用英文的双引号来创建字符串,例如:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

上面我们创建的s1和s2均是字符串标量(即单个字符串),大家可以使用size函数查看它们的大小:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

双引号表示的字符串需要看成一个整体,这一点一定要和字符向量区分开。

此外,我们可以使用其间不包含任何内容的双引号来创建空字符串 (""),请注意,空字符串的大小是1×1,而不是 0×0,这和字符向量有很大区别:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

如果我们将多个字符串标量使用中括号[]拼接起来,就能创建字符串数组。这种创建方法和第三章介绍的数值数组的方法一致:同行元素(这里是单个字符串)之间用逗号或者空格分隔,行与行之间用分号或回车键分隔。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

下面再来介绍两个在MATLAB 2016b版本中推出的非常实用的函数:strings和string。

1)使用 strings 函数创建空的字符串数组

strings 函数用来创建空的字符串数组。当我们需要初始化一个特定大小的字符串数组,并在后续代码中去动态地填充数组元素时,就需要用到这个函数。

例如,创建一个2行3列的空字符串数组:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

上面代码中,我们使用了两种方法创建这个2行3列的空字符串数组,里面的每个元素都是空字符串。此外,我们回顾了strcmp函数和isequal函数的使用方法:strcmp函数会将ss1和ss2中相同位置的元素进行比较,因此返回的是一个大小为2×3的逻辑数组;isequal函数则会比较ss1和ss2两个数组整体是否等效,因此返回的是一个逻辑标量。

2)使用 string 函数将其他数据类型转换为字符串数组

string函数能够将不同类型的数据转换为字符串类型。这一功能在数据处理中非常实用,尤其是在需要将各种数据统一为字符串进行分析时。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

此外,string函数还能将逻辑数组和数值数组转换成字符串数组:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

拓展一:将文本转换为数值数组

前文中我们介绍过num2str函数,它能将数值数组转换为字符数组;这一小节我们又介绍了string函数,它能将数值数组转换为字符串数组。

现在,让我们探讨相反的转换过程:将包含数值的文本数据类型转换回数值数组。这一过程在数据处理和分析中非常重要,特别是当我们需要从文本格式的数据中提取数值进行计算或分析时。下面我们介绍MATLAB中三个用来转换的函数:

1)使用 str2num函数转换字符数组或者字符串标量

str2num 函数主要用于将字符数组转换为数值数组,它的作用和num2str函数刚好相反。当我们从文件中读取的数据或者用户输入的数据是字符数组类型时,我们会用到这个函数:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

如果 str2num 函数不能将输入参数解析为数值,则返回空向量[]。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

另外,在较高版本的MATLAB中,str2num函数也能用于字符串标量的转换,但不支持字符串数组:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

事实上,str2num函数的底层是通过另一个内置函数:eval函数实现的。在MATLAB中,eval函数用于将输入的文本作为语句执行。例如:运行eval('a = [3 3*4]')等价于执行a = [3 3*4]。本书会在后续章节中介绍eval函数的更多应用以及它可能带来的问题。

因此,str2num函数中输入的文本可以包含数学表达式,例如:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

最后,str2num函数可以有两个返回值:[X, tf] = str2num(txt),如果str2num函数成功转换输入的文本txt,则第二个返回值tf等于逻辑值1,否则,tf等于逻辑值0.

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

2)使用 double函数转换字符串数组

在本章5.2节介绍字符数组时,我们知道double函数能将字符数组中的字符元素转换为对应的Unicode编码:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

这里我们介绍它的另一种用法:将字符串数组转换为对应的数值数组。注意,单个的字符串标量中仅能包含单个数字,如果有多个数字就会转换失败。当转换失败时,数组中对应位置的元素为NaN(第二章介绍过,NaN或nan表示不定值或缺失值)。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

此外,和str2num函数不同,double函数不支持字符串中出现表达式:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

3)使用str2double函数进行转换

str2double函数支持的数据类型比前两个函数更多,它支持字符数组、字符向量元胞数组和字符串数组三种数据类型,我们分别来进行介绍。

情况一:对字符数组进行转换:str2double函数能将字符数组转换为单个数值标量,其中表示数值的文本中可以包含千位分隔符(英文的逗号),这是str2num所不支持的。 如果输入的字符数组无法转换为数值标量,那么str2double函数会返回NaN.

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

str2double函数也不支持文本中出现表达式:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

另外,如果你要转换的字符数组中包含多个数值时,那么str2double函数会尝试将结果拼接成一个数值标量,并返回这个数值标量,而不是返回一个数值数组:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

因此,当我们希望将包含多个数值的字符数组转换为数值数组时,请改用 str2num 函数。

情况二:对字符向量元胞数组进行转换:前两个函数都不支持字符向量元胞数组的转换,只有str2double函数支持,它能将字符向量元胞数组转换为一个数值数组。如果元胞数组中的某个字符向量转换失败,则返回的数值数组的相同位置元素为NaN.

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

情况三:对字符串数组进行转换:当str2double函数用于字符串数组时,它的作用和double函数相同。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

拓展一的总结:我们介绍了三个用于将包含数值的文本转换为数值数组的函数:str2num、double和str2double。这函数各有特点和应用场景,在涉及到将复杂文本数据转换为数值数据时,选择合适的函数可以有效地提高数据处理的效率和准确性。

拓展二:混合创建字符串数组

在创建字符串数组时,MATLAB允许我们将数值、字符数组、逻辑值以及字符向量元胞数组混合在一起创建。注意:创建时至少有一个元素需要是字符串类型下面来看例子:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

需要注意的是,混合创建时,各元素的大小需要兼容,以便它们能恰好组合成一个字符串数组。如果大小不兼容,MATLAB会提示错误,例如:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

这些示例展示了MATLAB在创建字符串数组的强大能力,这种创建方式也为文本数据分析和处理提供了更多的灵活性和便利。

拓展三:计算字符串包含的字符数量

由于字符串标量是一个整体,使用sizelengthnumel函数无法得到字符串中包含的字符数量。为了解决这一问题,MATLAB在2016b版本中引入了一个专门的函数:strlength

它的使用方法非常简单,我们直接来看例子:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

另外,该函数也能用于字符向量以及字符向量元胞数组:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

因此,strlength函数为我们提供了一种统一的方法来计算不同类型文本数据中的字符数量。

拓展四:不推荐的字符串元胞数组

在MATLAB中,保存多段文本我们通常使用字符向量元胞数组或者字符串数组。事实上,当元胞数组中的每个数据都是字符串标量时,这样的元胞数组被称为字符串元胞数组。下面我们来看例子:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

上面代码中创建的s3就是一个字符串元胞数组。MATLAB中,不推荐使用这种类型来保存文本数据。许多文本处理相关的函数都不支持字符串元胞数组类型,例如:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

为什么MATLAB不推荐大家使用字符串元胞数组类型呢?下面我们简单介绍下MATLAB中数据的内存管理:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

可以看到,包含相同文本的三个数组中,字符串数组s1占用的内存最少,而字符串元胞数组s3占用的内存最多

事实上,即使这些数据类型包含的都是空文本,MATLAB 也会占用一定的内存:

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模

MATLAB 中字符串的内存占用不仅仅取决于其内容(如字符的数量),还与字符串对象本身的内部结构有关。字符串对象在 MATLAB 中被实现为一种复杂的数据结构,它不仅包含字符数据,还有其他与字符串相关的信息和属性。这就解释了为什么即使是一个空字符串(没有任何字符),也会占用一定的内存空间。元胞数组也是同样的道理,即使里面仅包含空字符向量或空字符串,也会占用一定的内存。

另外,对于同一个字符串或者元胞数组,在不同版本的 MATLAB 中也可能占用不同的内存。这通常是由于内部实现的差异所致,而不一定直接反映了保存数据的实际大小。通常,随着 MATLAB 版本的更新,数据类型内部的数据结构可能进行了优化或修改,这样能够提高性能或增加新的功能。

第5章:5.4.1 字符串数组的创建方法(MATLAB入门课程),MATLAB教程新手入门篇(数学建模清风主讲),数学建模


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

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

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

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

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

相关文章

  • MATLAB入门-字符串操作

    注:本篇文章是学习笔记,课程链接是:link 无论是字符还是字符串,都要使用单引号来‘’表示; 在MATLAB中,字符都是在矩阵中存储的,无论是一个英文字母还是一个汉字都算作一个字符char。 运行的结果显示: 与矩阵元素更改方法一样,对于字符串内的某个字符元素更改

    2024年02月09日
    浏览(44)
  • JavaScript 处理字符串数组数据方法

            前端三件套中 JavaScript 就是充电处理业务逻辑的一个角色,在很多情况之下,或像在做项目之中去发起一些数据请求之后待服务器响应回馈给到客户端的时候,对于返回的数据需要进行一个格式的处理,比如有JSON,字符串,XML等等这些数据格式,有时需要格式转化,

    2024年02月12日
    浏览(42)
  • java判断某个字符串是否在字符串数组中的方法(4种)

    public class Demo {     public static boolean useLoop(String[] arr, String targetValue) {         for (String s : arr) {             if (s.equals(targetValue)) return true;         }         return false;     }       public static void main(String[] args) {         String arr[] = {\\\"aa\\\", \\\"bb\\\", \\\"cc\\\"};       

    2024年02月11日
    浏览(100)
  • matlab字符串的操作方法

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

    2024年02月08日
    浏览(48)
  • 第5章:5.2 字符数组(MATLAB入门课程)

    讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 上一小节提过:字符(char)是文本的最基本单元。 在 MATLAB 中,单个字符使用单引号引起来,例如: \\\'a\\\' 、 \\\'0\\\' 、

    2024年01月15日
    浏览(47)
  • Java中字符串与byte数组之间的转换方法

    在Java编程中,我们常常需要对字符串和byte数组进行转换。字符串一般是用来表示文本信息,而byte数组则是用来表示二进制数据,如图片、音频等。本文将详细介绍Java中字符串和byte数组之间的转换方法,包括将字符串转换为byte数组和将byte数组转换为字符串。 Java中字符串与

    2024年02月09日
    浏览(47)
  • 数组排序 sort() 方法 (映射对含有大小写的字符串进行排序)

    结论先行: sort() 方法: 用于对数组元素进行 排序 ,默认升序。如果指明了参数,那数组会按照 比较函数 的返回值进行排序。    sort() 方法比较两个值时,将值发送给比较函数,根据返回的(负、零、正)值对值进行排序。 举例,a 和 b 两个将要被比较的元素: 如果 a-

    2024年04月25日
    浏览(45)
  • 第5章:5.3.2 字符向量元胞数组(MATLAB入门课程)

    ​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 在上一节中,我们详细介绍了一般的元胞数组的使用方法。 本节将重点学习字符向量元胞数组,这是一种特

    2024年02月03日
    浏览(35)
  • 【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

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

    2024年02月06日
    浏览(55)
  • C#入门级——常见字符串处理方法/函数

    目录 1、去除字符串前后的空格 Trim() 2、按指定分隔符分割字符串,对字符串进行切片,并返回分割后的字符串数组 split()  3、字符串与数字之间的转换 Convert.ToString() Convert.ToInt16() 如果是被分割字符中出现两个连续的分割字符,那么字符串数组结果集会出现有空字符串成员的

    2023年04月09日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包