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

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

>> class(a) %%注意此处使用class的时候必须要加括号,因class还有定义类的功能

>> whos a

>> whos a b c %%使用whos()函数查看多个变量只需使用空格分开即可

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

一、数值型

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 )复型

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

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

abs(z):计算复数的模

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

>> 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

n的空矩阵元胞数组。此处n必须为标量,否则产生错误

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

n的空矩阵元胞数组c,其中m,n为标量。

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

n

p

……的空矩阵元胞数组

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中有许多的函数可以用来处理时间和日期,

>> 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

通过计算器计算得:

.该处计算结果是理想化的计算结果,即忽略了总从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 0MATLAB--时间,日期及显示格式 - 箬笠蓑衣 - 博客园​www.cnblogs.com

七、函数句柄

在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

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

>> 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.csdn.net

上述为matlab中常见的数据类型,在不同的时候需要使用不同的数据类型。对于cell数组于struct数组的差异,使用及相互转化参考如下链接:灵魂歌手水云天:MATLAB数据类型及相互转换(二)​zhuanlan.zhihu.com

本文参考文献:

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

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

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

matlab如何把cell转int_MATLAB数据类型及相互转换(一)相关推荐

  1. Matlab百度中Cell(单元数据)的用法

    Cell是Matlab中的一种数据类型,概念和C语言中的结构体类似.用大括号定义,括号里可以是任意类型的数据或矩阵. 一.关于cell的创建: 1.跟一般创建矩阵一样,直接使用C = {A B D E ...

  2. 《MATLAB SYNTAX》第1章 数据类型

    第1章 数据类型 (1.1) 常用函数 (1.2) 数值型 (1.3) 字符(串)型 (1.4) 复数型 (1.5) 逻辑型 (1.6) 函数句柄 (1.7) 单元数组 (1.8) 结构体 (1.1) ...

  3. MATLAB中的cell类型(简介)

    在上一节的小短片中提到了cell函数,我在这简单介绍一点点cell函数吧,以免有不懂的小伙伴: cell是matlab中的一种数据类型,用大括号定义,括号里可以是任意类型的数据或矩阵. 然后关于cel ...

  4. MATLAB基本操作(三):数据类型

    Last Edit 2014/1/8 一,15种基本数据类型 1)整型:int8,uint8            示例a=int8(100);                 int16,uint1 ...

  5. matlab中的cellstr的用法,matlab中的cell array, cellstr()和char()的用法

    Cell Array的定义:顾名思义,Cell Array是由Cell构成的Array.Cell可以包含各种数据类型.可以使用()取cell array的子集,使用{}取cell array指定位置的 ...

  6. matlab r2020a例题 2.1节 数据类型(下)

    %例12 函数句柄的创建和调用 F_Handlea=@cos;%将'句柄F_Handlea'定义为cos函数.创建函数句柄 x=0:0.25*pi:2*pi;%从0到2pi,每次间隔0.25pi取一次 ...

  7. 【Matlab】删除cell中所有的空白cell

    删除cell中所有的空白cell. A是3*5的cell数组,包含空白cell A(cellfun(@isempty,A))=[]

  8. 【Matlab】删除cell中所有的空白cell.

    删除cell中所有的空白cell. A是3*5的cell数组,包含空白cell A(cellfun(@isempty,A))=[]

  9. Python创建类似Matlab中的cell数组

    转载自:https://blog.csdn.net/raby_gyl/article/details/78016690,本文只做个人记录学习使用,版权归原作者所有. npose = 5 nsmile ...

  10. 在MATLAB function中可变的变量数据类型

    定义维度变化的变量,以及引用外部函数: 引用外部函数:coder.extrinsic 定义维度变化的变量:coder.varsize 修改数据的类型

最新文章

  1. CorrNet3D:基于无监督的非刚性点云配准网络 (CVPR2021)
  2. 如何制作VSPackage的安装程序
  3. [jquery]if条件句
  4. Linux 上 GDM 登录界面如何适应高分屏
  5. 【Android应用保护技术探索之路系列】之一:Android应用保护技术开篇
  6. 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
  7. solr5.5索引mysql数据(新手总结)
  8. android区域截图app,【干货】最新App应用市场截图尺寸大全
  9. c++ 打印条码_条码标签打印软件快捷键指南
  10. 针织面料常见疵点及原因分析大全
  11. 抽象类和接口的主要区别
  12. React的性能优化 - 代码拆分之lazy的使用方法
  13. 从一个小Demo看React的diff算法
  14. 怎么修改chrome浏览器的字体
  15. cad批量打印_CAD如何进行批量打印图纸
  16. 对MC9S12XS128MAL中TIM、PIT、RTI的一点理解
  17. Android自定义半圆形圆盘滚动选择器View
  18. 词法分析器设计与实现
  19. 2038年危机!“Unix千年虫”
  20. 推荐系统-排序算法:GBDT+LR

热门文章

  1. instanceof是什么意思
  2. binomial检验_SPSS中八类常用非参数检验之二:二项分布(Binomial)检验
  3. 【upc】生命曲线(线段树) —— 一个能让你搞懂线段树懒标的题目
  4. 【DBSDFZOJ 4370】小宁的机器人(模拟)
  5. 神秘美女接机刘谦 曝刘谦女友酷似舒淇身家过亿
  6. 点击地图出现导航php,在H5页面中,通过地址打开高德地图以实现导航
  7. windows 电脑如何查看电脑显卡内存(显存)、CPU型号、内存、USB集线器等配置信息 win+r dxdiag
  8. 门户通专访蓝色理想曾沐阳:用户需慢慢沉淀
  9. 程序员面试金典(第 6 版)
  10. 字体大小fontsize中的pt、px、em