matlab double转换字符_MATLAB数据类型及相互转换(一)

这篇博客详细介绍了MATLAB中的数据类型,包括数值型(整型、浮点型、复型)、逻辑型、字符型、struct数组、cell数组、时间和日期型以及函数句柄。文中提到MATLAB中变量默认为矩阵,可以通过whos()和class()函数查看数据类型。重点讲解了double转字符、逻辑型转换、结构体和单元数组的创建、访问及删除方法,以及时间和日期的处理函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

b4be29c307b360479c3385d513cc46af.png

MATLAB 中的数据类型与其它语言类似,下文将对MATLAB中的数据类型做一总结

注意:在matlab中有whos()函数和class()函数等可以查看变量数据类型,使用格式如下代码

>> class(a)  %%注意此处使用class的时候必须要加括号,因class还有定义类的功能
>> whos a
>> whos a b c   %%使用whos()函数查看多个变量只需使用空格分开即可

MATLAB中的变量都默认为一个矩阵,矩阵中元素数据类型有下列几类:

e140280943bfdf3e4c18d4ebb234fde1.png

一、数值型

1、整型

(1) int:带符号整型

(2) uint:无符号整型

>> a = 18;
>> b = -18;
>> whos a b    %%此处whos()函数可以查看参数的属性
  Name      Size            Bytes  Class     Attributes

  a         1x1                 8  double              
  b         1x1                 8  double    
>> a1 = int8(a);
>> b1 = int8(b);
>> whos a1 b1
  Name      Size            Bytes  Class    Attributes

  a1        1x1                 1  int8               
  b1        1x1                 1  int8            
>> a2 = uint8(a)

a2 =

  uint8

   18

>> b2 = uint8(b)   %%注意此处将负数强制转换成无符号数值时成为0

b2 =

  uint8

   0        

2、浮点型

(1)single:单精度

(2)double:双精度

double()函数可以将字符转化为相应的ASCII码组成的向量

s = 'chenwen wen';

>> double(s(3))

ans =

   101

(3 )复型

equation?tex=z+%3D+a%2Bbi

real(z):计算复数的实部

equation?tex=a

imag(z):计算复数的虚部

equation?tex=b

abs(z):计算复数的模

equation?tex=%5Csqrt%7Ba%5E%7B2%7D%2Bb%5E%7B2%7D%7D

angle(z): 以弧度为单位给出复数的幅角

equation?tex=arctan%5Cfrac%7Bb%7D%7Ba%7D
>> z = 2+3i;
>> x1 = real(z)

x1 =

     2

>> x2 = imag(z)

x2 =

     3
>> x3 = abs(z)

x3 =

    3.6056

>> angle(z)

ans =

    0.9828

>> x4 = angle(z)

x4 =

    0.9828

二、逻辑型(布尔型)

ind = x<0;
x(ind) = 1;
%使用上述代码可以将x向量中小于零的数全部转化为1;

logical()函数可以将数值型转化为逻辑型

任何非零的转化为真1,零为假0

三、字符型

MATLAB中的字符在存储空间中与相应的ASCII码对应,字符串可以理解为字符的数组。

>> a = [1:5];         %a为一个数值数组
>> b = num2str(a);    %该函数将a转化为字符串类型
>> x1 = a*2;          %此处为a中的数值一次乘2
>> x2 = b*2;          %由于b中为字符,所以此处为b中字符的ASCLL码和2相乘
>> x1

x1 =

     2     4     6     8    10

>> x2

x2 =

    98    64    64   100    64    64   102    64    64   104    64    64   106

四、struct数组(结构体数据)

结构体数组的基本部分(Element)是结构(structure)。数组中的每个结构都是平等的,他们以下标区分。

1、结构数组的创建

(1)直接赋值法

>> student.name = 'zhangsan';
>> student.grade = 18;
>> student.subject = {'maple','matlab','mathmatics'};
>> student.result = {87 ,89, 90};
>> student

student = 

  包含以下字段的 struct:

       name: 'zhangsan'
      grade: 18
    subject: {'maple'  'matlab'  'mathmatics'}
     result: {[87]  [89]  [90]}
>> whos student
  Name         Size            Bytes  Class     Attributes

  student      1x1              1466  struct            

(2)函数法

在matlab中使用struct()函数来创建结构体数组。

调用格式:

s = struct('field1','values','field2','values',……)

s = struct('field1',{},'field',{},……)

s = struct([ ]):建立一个没有字段的空结构。

s = struct(obj):将对象obj转换为它的等价结构。

field为字段名,value表示对应于field的字段值。field必须是和value同样大的元胞数组或标量。value相当于所有field的一个名字集合,一个struct中有不同的域,每一个域有一个名字value1,value2 ……,这些value的总和为value,一个value对应一个field,所有field的总和为field

>> field = 'f';
>> value = {'test';[18 29 10];magic(3)};
>> s = struct(field,value);   %%在该struct中定义了一个域,该域对应着三列
>> s.f

ans =

    'test'


ans =

    18    29    10


ans =

     8     1     6
     3     5     7
     4     9     2

>> s(2).f               %%此处为显示第二列的域field

ans =

    18    29    10

2、结构数组的操作

(1)对结构数组的访问和显示

a、同数组的访问,如s(:,1);

b、s.field1可以访问field对应的所有value

c、s(1).field1 可以访问第一列在field1对应的值

具体见下面代码实例

>> ss = struct('name',{'huang','chen','liu'},'num',[83 93 98],'age',{23 18 29});
>> ss(:,2)      %% 例子a

ans = 

  包含以下字段的 struct:

    name: 'chen'
     num: [83 93 98]
     age: 18

>> ss.num   %% 例子b

ans =

    83    93    98


ans =

    83    93    98


ans =

    83    93    98
>> ss(1).name   例子c

ans =

    'huang'

(2)删除结构体

删除结构体一般使用rnfield()函数

调用格式:

s = rmfield(s,field): 用于删除成员变量field,当field为字符型变量或单元型变量时,可以一次删除多个指定的成员变量。

>> s.chen = 19;
>> s.wang = 39;
>> s.liu = 89;
>> s.zhao = 98;
>> fields = {'wang','zhao'};
>> s = rmfield(s,fields)       %%注意此处引用函数rmfield来将s结构体中field域删除。

s = 

  包含以下字段的 struct:

    chen: 19
     liu: 89

五、cell数组(单元数组)

cell数组是由可以包括任何数据类型的单元组成的数组。,使用"{}"创建。使用“;”分行。

通过cell数组可以在同一个变量中存储不同数据类型的数据,给代码的编写带来的很大的便利

1、cell数组的创建:

(1) 直接赋值法:

此方法较为容易,需要注意的是

a、无论用"()"还是用"{}"都可以表示单元的下标,而且都可以用来输入元素,但是前后需要不同。

b、使用"{}"表示单元下标的时候后面可以不用括号,使用"()"的时候不行。

>> A(1,1) = {[2 3 4 ;2 3 4]};
>> A(1,2) = {'dhifnj'};
>> A{1,3} = 'chen';
>> A{1,4} = ('fsdfa')

A =

  1×4 cell 数组

    {2×3 double}    {'dhifnj'}    {'chen'}    {'fsdfa'}
>> A(1,5) = 'dsaf'
无法从 char 转换为 cell。     %%此处为matlab报错!!!
 
>> A(1,5) =('dhkg')
无法从 char 转换为 cell。     %%此处为matlab报错!!!

(2) 函数法:

使用cell()函数生成单元数组,相当于先利用函数对单元内存空间分配成给定的区域,然后对单元中的元素进行赋值。

调用格式:

c = cell(n): 建立一个n

equation?tex=%5Ctimes n的空矩阵元胞数组。此处n必须为标量,否则产生错误

c = cell(m,n) 或c = cell([m,n]): 建立一个m

equation?tex=%5Ctimes n的空矩阵元胞数组c,其中m,n为标量。

c = cell(m,n,p,……)或c = ([m,n,p,……]): 建立一个m

equation?tex=%5Ctimes n
equation?tex=%5Ctimes p
equation?tex=%5Ctimes ……的空矩阵元胞数组

c = cell(size(A)): 建立一个元胞数组c,其大小同数组A.

c = cell(javaobj): 将java数组或者java对象javaobj转换为matlab中的cell数组。

>> A = cell(3)

A =

  3×3 cell 数组

    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}
%%下面是对Java数组的转换
>> strArray = java_array('java.lang.String',3);
>> strArray(1) = java.lang.String('one');
>> strArray(2) = java.lang.String('two');
>> strArray(3) = java.lang.String('three');
>> cellArray = cell(strArray)

cellArray =

  3×1 cell 数组

    {'one'  }
    {'two'  }
    {'three'}

2、单元数组的访问和显示:(1) 使用"{}"访问

使用{}可以访问到cell数组内元素具体的内容,并且可对其中的数据执行具体的操作

>> A = {3,'chen';magic(3),magic(3)>2};
>> A

A =

  2×2 cell 数组

    {[       3]}    {'chen'     }
    {3×3 double}    {3×3 logical}

>> A{1,2}     %%使用"{}"访问A中第一行第二列中的数组

ans =

    'chen'

>> A{2,2}    %% 使用"{}"访问A中第二行第二列中的数组

ans =

  3×3 logical 数组

   1   0   1
   1   1   1
   1   1   0

>> A{2,1}(1,2)  %% "{}"和"()"共同使用访问A中第二行第一列中数组的第一行第二列的元素

ans =

     1

(2)使用"()"访问

使用()可以访问单元数组是访问单元数组中的整体,不可以访问cell数组中的具体元素。

>> A = {3,'chen';magic(3),magic(3)>2};
>> A(2,2)

ans =

  1×1 cell 数组

    {3×3 logical}
>> A(1,2)

ans =

  1×1 cell 数组

    {'chen'}

3、cell数组的删除

对于cell数组的删除可以通过把需要删除的单元赋值为空来实现。通过"{}"和"()"来访问元素并将其赋值置空,即可删除需要删除的内容。

在cell数组删除的时候与上面相同可以使用"{}"和"()"两种来实现删除,用法与cell数组的访问相同。

>> A = {3,'chen';magic(3),magic(3)>2};
>> A

A =

  2×2 cell 数组

    {[       3]}    {'chen'     }
    {3×3 double}    {3×3 logical}  %%此处A{2,2}处为一个3*3的数组,与下面对应
>> A{2,2}(2,:) = [];                 %%使用该行代码将A{2,2}中第二行全部删除
>> A

A =

  2×2 cell 数组

    {[       3]}    {'chen'     }
    {3×3 double}    {2×3 logical}  %%此处A{2,2}为一个2*3的数组

六、时间和日期型

MARLAB中有许多的函数可以用来处理时间和日期,

4dd4f8e0d27044eb7f80ac928b66b2eb.png
>> format shortg
>> clock

ans =

         2019            8           15           21           53        17.41

>> date

ans =

    '15-Aug-2019'
>> A = '15-Aug-2019';
>> [DayNumber,DayName] = weekday(A)  %%返回该日期的星期
                                     此处DayNumber为星期的序号,从周日开始计算。
DayNumber =

     5

         
DayName =

    'Thu'

日期与时间格式转换:

a、datestr()函数: 该函数可以将日期数字和日期向量转化为日期字符串,

>> x = datestr(now)

x =

    '15-Aug-2019 22:29:42'

>> x1 = datestr(now,'dd-mmm-yyyy')

x1 =

    '15-Aug-2019'

>> x2 = datestr(now,'HH:MM:SS')

x2 =

    '22:32:28'

b、datenum()函数

该函数用于将日期字符串和日期向量转化为日期数字。此处的日期数字是一串数字,其计算是将每个时间点表示为从 0000 年 1 月 0 日起的天数。咋们可以通过计算来验证次结果。

下面代码设定要计算的时间为2018-8-3 00-00-00,通过函数计算后返回737275

通过计算器计算得:

equation?tex=2018%5Ctimes365%2B8%5Ctimes31%2B3%3D736813 .该处计算结果是理想化的计算结果,即忽略了总从0000年至2018年以来的闰年闰月等情况,全部当作365天计算,忽略的2018年前八个月的天数差异,全部当作30天计算。得出结果与函数计算结果相近,所以原结果可靠。
>> t = '03-Aug-2018 00:00:00'

t =

    '03-Aug-2018 00:00:00'

>> DateNumber = datenum(t)

DateNumber =

      737275

c、datevec()函数

该函数可以将日期数字和日期字符串转化为日期向量。

>> DateString = '28.03.2005';
>> formatIn = 'dd.mm.yyyy';
>> datevec(DateString,formatIn)

ans =

        2005           3          28           0           0           0
>> DateString1 = {'09/16/2007';'05/14/2019';'11/29/1020'};
>> formatIn1 = 'mm/dd/yyyy';
>> datevec(DateString1,formatIn1)

ans =

        2007           9          16           0           0           0
        2019           5          14           0           0           0
        1020          11          29           0           0           0
MATLAB--时间,日期及显示格式 - 箬笠蓑衣 - 博客园​www.cnblogs.com
7f289e73aa030081c974b3ff9f8d829f.png

cf69a4554898a3f2a10eceb0b9f6dbf4.png

七、函数句柄

在MATLAB中可以通过调用函数句柄来简介调用函数,相当于给函数一个名字,然后通过该名字来调用该函数。

函数句柄的基本结构是:function_handle

例如,f = @sin,我们可以通过f来调用sin()函数。

>> f = @sin

f =

  包含以下值的 function_handle:

    @sin
>> t = 0:pi/5:pi;
>> f(t)

ans =

            0      0.58779      0.95106      0.95106      0.58779   1.2246e-16

常用的几个与句柄相关的函数:

bcc336da7228f536873c5c03326b868e.png
>> fhandle = @sin;
>> func2str(fhandle)

ans =

    'sin'

>> ff = 'cos';
>> str2func(ff)

ans =

  包含以下值的 function_handle:

    @cos

>> fff = functions(@plot)

fff = 

  包含以下字段的 struct:

    function: 'plot'
        type: 'simple'
        file: 'MATLAB built-in function'
>> f = cellfun(@str2func,{'sin','cos','tan'},'UniformOutput',false);
%%此处cellfun函数实际上是将cell数组里的所有元素执行函数str2func。
>> f{2}(2*pi)      %%此处{}代表元胞数组第二个元素cos,(2*pi)表示自变量为2*pi

ans =

     1

上述代码中cellfun()函数的用法可以参考下面链接

Matlab cellfun函数​blog.youkuaiyun.com

上述为matlab中常见的数据类型,在不同的时候需要使用不同的数据类型。对于cell数组于struct数组的差异,使用及相互转化参考如下链接:

灵魂歌手水云天:MATLAB数据类型及相互转换(二)​zhuanlan.zhihu.com
5913e3f959d9afa18ec012b2425ab097.png

本文参考文献:

清华大学出版社《MATLAB基础于可视化编程》

由于水平有限,时间仓促,不足之处请批评指正。

更多MATLAB学习资源请入QQ群:953314432。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值