matlab如何把cell转int_MATLAB数据类型及相互转换(一)
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数据类型及相互转换(一)相关推荐
- Matlab百度中Cell(单元数据)的用法
Cell是Matlab中的一种数据类型,概念和C语言中的结构体类似.用大括号定义,括号里可以是任意类型的数据或矩阵. 一.关于cell的创建: 1.跟一般创建矩阵一样,直接使用C = {A B D E ...
- 《MATLAB SYNTAX》第1章 数据类型
第1章 数据类型 (1.1) 常用函数 (1.2) 数值型 (1.3) 字符(串)型 (1.4) 复数型 (1.5) 逻辑型 (1.6) 函数句柄 (1.7) 单元数组 (1.8) 结构体 (1.1) ...
- MATLAB中的cell类型(简介)
在上一节的小短片中提到了cell函数,我在这简单介绍一点点cell函数吧,以免有不懂的小伙伴: cell是matlab中的一种数据类型,用大括号定义,括号里可以是任意类型的数据或矩阵. 然后关于cel ...
- MATLAB基本操作(三):数据类型
Last Edit 2014/1/8 一,15种基本数据类型 1)整型:int8,uint8 示例a=int8(100); int16,uint1 ...
- matlab中的cellstr的用法,matlab中的cell array, cellstr()和char()的用法
Cell Array的定义:顾名思义,Cell Array是由Cell构成的Array.Cell可以包含各种数据类型.可以使用()取cell array的子集,使用{}取cell array指定位置的 ...
- matlab r2020a例题 2.1节 数据类型(下)
%例12 函数句柄的创建和调用 F_Handlea=@cos;%将'句柄F_Handlea'定义为cos函数.创建函数句柄 x=0:0.25*pi:2*pi;%从0到2pi,每次间隔0.25pi取一次 ...
- 【Matlab】删除cell中所有的空白cell
删除cell中所有的空白cell. A是3*5的cell数组,包含空白cell A(cellfun(@isempty,A))=[]
- 【Matlab】删除cell中所有的空白cell.
删除cell中所有的空白cell. A是3*5的cell数组,包含空白cell A(cellfun(@isempty,A))=[]
- Python创建类似Matlab中的cell数组
转载自:https://blog.csdn.net/raby_gyl/article/details/78016690,本文只做个人记录学习使用,版权归原作者所有. npose = 5 nsmile ...
- 在MATLAB function中可变的变量数据类型
定义维度变化的变量,以及引用外部函数: 引用外部函数:coder.extrinsic 定义维度变化的变量:coder.varsize 修改数据的类型
最新文章
- CorrNet3D:基于无监督的非刚性点云配准网络 (CVPR2021)
- 如何制作VSPackage的安装程序
- [jquery]if条件句
- Linux 上 GDM 登录界面如何适应高分屏
- 【Android应用保护技术探索之路系列】之一:Android应用保护技术开篇
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- solr5.5索引mysql数据(新手总结)
- android区域截图app,【干货】最新App应用市场截图尺寸大全
- c++ 打印条码_条码标签打印软件快捷键指南
- 针织面料常见疵点及原因分析大全
- 抽象类和接口的主要区别
- React的性能优化 - 代码拆分之lazy的使用方法
- 从一个小Demo看React的diff算法
- 怎么修改chrome浏览器的字体
- cad批量打印_CAD如何进行批量打印图纸
- 对MC9S12XS128MAL中TIM、PIT、RTI的一点理解
- Android自定义半圆形圆盘滚动选择器View
- 词法分析器设计与实现
- 2038年危机!“Unix千年虫”
- 推荐系统-排序算法:GBDT+LR
热门文章
- instanceof是什么意思
- binomial检验_SPSS中八类常用非参数检验之二:二项分布(Binomial)检验
- 【upc】生命曲线(线段树) —— 一个能让你搞懂线段树懒标的题目
- 【DBSDFZOJ 4370】小宁的机器人(模拟)
- 神秘美女接机刘谦 曝刘谦女友酷似舒淇身家过亿
- 点击地图出现导航php,在H5页面中,通过地址打开高德地图以实现导航
- windows 电脑如何查看电脑显卡内存(显存)、CPU型号、内存、USB集线器等配置信息 win+r dxdiag
- 门户通专访蓝色理想曾沐阳:用户需慢慢沉淀
- 程序员面试金典(第 6 版)
- 字体大小fontsize中的pt、px、em