MATLAB 之 常用内部函数,运算,字符串和结构数据与单元数据-2

简介: 在 MATLAB 中,有两种基本的数据类型,一个是数值型数据,一个是字符型数据或称字符串数据。数值型数据比较好理解,是指能参与数值运算的数据,又分为整型、浮点型和复数型。字符型数据在日常应用中则不太强调,但却是大量存在的,例如统计一篇英文文章中不同英文字母出现的次数,按姓名排序,等等。字符串数据由若干个字符组成,这些字符可以是计算机系统中允许使用的任何字符

三、字符串


在 MATLAB 中,有两种基本的数据类型,一个是数值型数据,一个是字符型数据或称字符串数据。

数值型数据比较好理解,是指能参与数值运算的数据,又分为整型、浮点型和复数型。


字符型数据在日常应用中则不太强调,但却是大量存在的,例如统计一篇英文文章中不同英文字母出现的次数,按姓名排序,等等。字符串数据由若干个字符组成,这些字符可以是计算机系统中允许使用的任何字符。


1. 字符串的表示

  • 在 MATLAB 中,字符串是单引号括起来的字符序列。
>> x='yan zi 22'
x =
    'yan zi 22'

若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。

>> 'I ''m a student.'
ans =
    'I 'm a student.'

MATLAB 将一个字符串当作一个行向量,每个元素对应一个字符,其引用方法和数值向量相同。

>> A='ABCDEF';
>> A(1:3)
ans =
    'ABC'

也可以建立多行字符串,形成字符串矩阵。

>> A=['abcdef';'123456'];
>> A(2,3)
ans =
    '3'

需要注意的是,这里要求各行字符数要相等。为此,有时不得不用空格来调节各行的长度,使它们彼此相等。

例如,我们建立一个字符串向量,然后对该向量做如下处理。

(1) 取第 1~5 个字符组成的子字符串。

(2) 将字符串倒过来重新排列。

(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。

(4) 统计字符串中小写字母的个数。

>> A='ABc123d4e56Fg9';
>> A1=A(1:5)
A1 =
    'ABc12'
>> A2=A(end:-1:1)
A2 =
    '9gF65e4d321cBA'
>> k=find(A>='a'&A<='z');
>> A(k)=A(k)-('a'-'A')
A =
    'ABC123D4E56FG9'
>> length(k)
ans =
     4

2. 字符串的操作

2.1 字符串的执行


  • 与字符串有关的一个重要函数是 eval,它的作用是把字符串的内容作为对应的 MATLAB 命令来执行,其调用格式如下:
>> eval(s)


其中,s 是字符串。

>> t=pi;
>> m='[t,sin(t),cos(t)]';
>> y=eval(m)
y =
    3.1416    0.0000   -1.0000

2.2 字符串与数值之间的转换

  • 字符串是以 ASCII 码形式存储的,absdouble 函数都可以用来获取字符串矩阵所对应的 ASCII 码数值矩阵。char 函数可以把 ASCII 码矩阵转换为字符串矩阵。
>> s1='MATLAB';
>> a=abs(s1)
a =
    77    65    84    76    65    66
>> b=double(s1)
b =
    77    65    84    76    65    66
>> char(a+32)
ans =
    'matlab'
  • MATLAB 还有许多用于字符串和数值数据之间转换的函数。
  • setstr 函数将 ASCII 码值转换成对应的字符。
  • str2num 函数或 str2double 函数将数字字符串转换成数值。
  • num2str 函数将数值转换成字符串。
  • int2str 函数将整数转换成字符串。

2.3 字符串的连接


  • 在 MATLAB 中,要将两个字符串连接在一起,有两种常见方法:一是用字符串向量,二是用 strcat 函数。
  • 用字符串向量可以将若干个字符串连接起来,即用中括号将若干个字符串括起来,从而得到一个更长的字符串。
>> f=70;
>> c=(f-32)/1.8;
>> ['Room temperature is ',num2str(c),' degree C.']
ans =
    'Room temperature is 21.1111 degree C.'
  • strcat 函数可以将若干个字符串连接起来。
>> strcat('yan','zi','22')
ans =
    'yanzi22'


2.4 字符串的比较


  • 字符串的比较有两种方法,利用关系运算符或字符串比较函数。
  • 当两个字符串拥有相同的长度时,可以利用关系运算符对字符串进行比较,比较的规则是按 ASCII 值大小逐个字符进行比较,比较的结果是一一个数值向量,其元素为对应字符比较的结果。
>> 'www0'>='W132'
ans =
  1×4 logical 数组
   1   1   1   0

字符串比较函数用于判断字符串是否相等,有 4 种比较方式,函数如下。

(1) strcmp(s1,s2):用来比较字符串 s1 和 s2 是否相等,如果相等,返回 1, 否则返回 0。

(2) strncmp(s1,s2,n):用来比较前 n 个字符是否相等,如果相等,返回 1,否则返回 0。

(3) strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串 s1 和 s2 是否相等,如果相等,返回 1,否则返回 0。

(4) strnempi(s1,s2,n):在忽略字符串大小写前提下,比较前 n 个字符是否相等,如果相等,返回 1,否则返回 0。

>> strcmp('www0','W123')
ans =
  logical
   0
>> strncmpi('ww0','W12',1)
ans =
  logical
   1

2.5 字符串的查找与替换

  • MATLAB 提供了许多函数,用来对字符串中的字符进行查找与替换。常用的有以下两个。
  • (1) findstr(s1,s2):返回短字符串在长字符串中的开始位置(s1,s2 的顺序没有要求)。
>> p1=findstr('this is a test','is')
p1 =
     3     6
>>  p2=findstr('is','this is a test')
p2 =
     3     6
  • 短字符串 is 在长字符串 this is a test 中出现两次,开始位置分别为 3 和 6。
  • (2) strep(1,s2,s3):将字符串 s1 中的所有子字符串 s2 替换为字符串 s3。
>> p3=strrep('this is a test','test','success')
p3 =
    'this is a success'

四、结构数据与单元数据


  • MATLAB 新增加了两种数据类型:结构数据类型和单元数据类型。
  • 这两种数据类型均是将不同的相关数据集成到一个单-的变量中,使得大量的相关数据的处理
    与引用变得简单、方便。


1. 结构数据


  • 个人感觉可以参考 C++ 中的结构体。
  • 结构数据类型把一组类型不同而逻辑上相关的数据组成一个有机的整体,以便于管理和引用。例如要存储学生的基本信息就可采用结构数据类型。


1.1 结构数据的建立与引用

  • 结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。建立一个结构矩阵可以采用给结构成员赋值的办法,其格式如下:
    结构矩阵名.成员名=表达式

其中,表达式应理解为矩阵表达式。例如,我们要建立含有 3 个元素的结构矩阵 a,命令如下:

>> a(1).x1=10;a(1).x2='liu';a(1).x3=[11,21;34,78];
>> a(2).x1=12;a(2).x2='wang';a(2).x3=[34,191;27,578];
>> a(3).x1=14;a(3).x2='cai';a(3).x3=[13,180;57,231];
  • 这里需要注意的是,结构矩阵元素的成员也可以是结构数据。
>> a(2).x1.x11=90;a(2).x1.x12=12;a(2).x1.x13=30;


  • 以上建立的结构矩阵 a 含有 3 个元素,每个元素又含有 3 个成员,成员 a(2).x1 又是含有 3 个成员的结构数据。
  • 对结构数据的引用,可以引用其成员,也可以引用结构矩阵的元素或结构变量。
 >> a(2).x3
ans =
    34   191
    27   578
>> a(2)
ans = 
  包含以下字段的 struct:
    x1: 12
    x2: 'wang'
    x3: [2×2 double]
>> a
a = 
  包含以下字段的 1×3 struct 数组:
    x1
    x2
    x3

引用结构矩阵元素的成员时,显示其值。引用结构矩阵元素时,显示成员名和它的值,但成员是矩阵时,不显示其具体内容,只显示成员矩阵大小参数。引用结构矩阵时,只显示结构矩阵的大小参数和成员名。


1.2 结构成员的修改

  • 可以根据需要增加或删除结构的成员。例如,我们要给结构矩阵 a 增加一一个成员 x4, 可给 a 中任意一个元素增加成员 x4,命令如下:


>> a(1).x4='410075';
  • 但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。
  • 要删除结构的成员,则可以使用 rmfield 函数来完成。例如,要删除成员 x4,命令如下:
>> a=rmfield(a,'x4');


2. 单元数据


  • 单元数据类型与结构数据类型类似,也是把不同属性的数据放在一个变量中。不同的是,结构矩阵的各个元素下有成员,每个成员都有自己的名字,对成员的引用如下:
结构矩阵名.成员名


  • 而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。
  • 建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。
>> a={10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]}
a =
  3×3 cell 数组
    {[10]}    {'liu' }    {2×2 double}
    {[12]}    {'wang'}    {2×2 double}
    {[14]}    {'cai' }    {2×2 double}

可以用带有大括号下标的形式引用单元矩阵元素。

>> a{3,3}
ans =
    13   890
    67   231
  • 单元矩阵的元素可以是结构或单元数据。例如,我们先建立结构变量 y,给上面建立的单位矩阵 a 的元素 a{3,4} 赋值,命令如下:
>> y.x1=34;y.x2=56;
>> a{3,4}=y;


可以使用 celldisp 函数来显示整个单元矩阵,如 celldisp(a)。还可以删除单元矩阵中某个元素,如删除 a 的第 3 个元素,其命令如下:

>> a(3)=[]
a =
  1×11 cell 数组
  列 1 至 8
    {[10]}    {[12]}    {'liu'}    {'wang'}    {'cai'}    {2×2 double}    {2×2 double}    {2×2 double}
  列 9 至 11
    {0×0 double}    {0×0 double}    {1×1 struct}

单元矩阵 a 的第 3 个元素被删除侯,a 变成行向量。这里需要注意的是,这里是 a(3),而不是 a{3}。a{3}=[] 是将 a 的第 3 个元素置为空矩阵,而不是删除它。

相关文章
|
1月前
|
Serverless
MATLAB中的矩阵与向量运算
【10月更文挑战第2天】本文全面介绍了MATLAB中的矩阵与向量运算,包括基本操作、加减乘除、转置、逆矩阵、行列式及各种矩阵分解方法。通过丰富的代码示例,展示了如何利用矩阵运算解决线性方程组、最小二乘法拟合、动态系统模拟和电路分析等问题。掌握这些运算不仅提升编程效率,还能在工程计算和科学研究中发挥重要作用。
51 1
|
4月前
|
机器学习/深度学习 算法 数据挖掘
基于改进K-means的网络数据聚类算法matlab仿真
**摘要:** K-means聚类算法分析,利用MATLAB2022a进行实现。算法基于最小化误差平方和,优点在于简单快速,适合大数据集,但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限,提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值,计算距离代价,寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
|
5月前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
108 6
|
5月前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,带GUI界面,对比BP,RBF,LSTM
这是一个基于MATLAB2022A的金融数据预测仿真项目,采用GUI界面,比较了CNN、BP、RBF和LSTM四种模型。CNN和LSTM作为深度学习技术,擅长序列数据预测,其中LSTM能有效处理长序列。BP网络通过多层非线性变换处理非线性关系,而RBF网络利用径向基函数进行函数拟合和分类。项目展示了不同模型在金融预测领域的应用和优势。
|
6月前
|
机器学习/深度学习 算法
m基于GA-GRU遗传优化门控循环单元网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,一个基于遗传算法优化的GRU网络展示显著优化效果。优化前后的电力负荷预测图表显示了改进的预测准确性和效率。GRU,作为RNN的一种形式,解决了长期依赖问题,而遗传算法用于优化其超参数,如学习率和隐藏层单元数。核心MATLAB程序执行超过30分钟,通过迭代和适应度评估寻找最佳超参数,最终构建优化的GRU模型进行负荷预测,结果显示预测误差和模型性能的提升。
185 4
|
5月前
|
机器学习/深度学习 算法
基于蛙跳优化的神经网络数据预测matlab仿真
使用MATLAB2022a,应用蛙跳优化算法(SFLA)调整神经网络权重,提升预测精度,输出预测曲线。神经网络结合输入、隐藏和输出层进行预测,蛙跳算法模仿蛙群觅食行为优化权重和阈值。算法流程包括蛙群初始化、子群划分、局部搜索及适应度更新,直至满足停止条件。优化后的神经网络能提升预测性能。
|
5月前
|
机器学习/深度学习 算法
m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
摘要: 在MATLAB 2022a中,对比了电力负荷预测算法优化前后的效果。优化前为&quot;Ttttttt111222&quot;,优化后为&quot;Tttttttt333444&quot;,明显改进体现为&quot;Tttttttttt5555&quot;。该算法结合了粒子群优化(PSO)和长门控循环单元(GRU)网络,利用PSO优化GRU的超参数,提升预测准确性和稳定性。PSO模仿鸟群行为寻找最优解,而GRU通过更新门和重置门处理长期依赖问题。核心MATLAB程序展示了训练和预测过程,包括使用&#39;adam&#39;优化器和超参数调整,最终评估并保存预测结果。
56 0
|
6月前
|
计算机视觉
MATLAB用Lasso回归拟合高维数据和交叉验证
MATLAB用Lasso回归拟合高维数据和交叉验证
|
6月前
|
机器学习/深度学习 数据可视化 网络架构
Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
Matlab用深度学习循环神经网络RNN长短期记忆LSTM进行波形时间序列数据预测
|
6月前
|
SQL 移动开发 算法
MATLAB改进模糊C均值聚类FCM在电子商务信用评价应用:分析淘宝网店铺数据|数据分享
MATLAB改进模糊C均值聚类FCM在电子商务信用评价应用:分析淘宝网店铺数据|数据分享