matlab中数据类型定义(matlab默认的数值型数据类型)

1.34元胞数组1.元胞数组的创建、索引和转换方法2.认识函数创建方法:a={}和cell(与Python中字典结构相似)判断iscell索引()和{}转换cell2mat、mat2cell3.概念元胞数组(cellarray)是一种具有容器特

1.34 元胞数组

1.元胞数组的创建、索引和转换方法

2.认识函数

创建方法:a={}和cell (与Python中字典结构相似)

判断iscell

索引()和{}

转换cell2mat、mat2cell

3.概念

元胞数组(cell array)是一种具有容器特性的数据类型,每个元素可以包含任何类型的数据

4.说明

元胞数组创建和扩展时默认填充元素是空矩阵[]

元胞数组不需要完全连续的内存,但每个元素需要连续的内存

对大型的元胞数组,增加元素数量可能导致Out of Memory错误

因此,必要时,元胞数组需要初始化和预分配内存

5.实例演示

%1_34

%% 元胞数组创建、2种预分配内存方法

a={}

b={1,2,magic(3)

\’a\’,[\”a\”,\”b\”],[]} %分别双精度标量、3阶魔方矩阵、字符、字符串数组、空矩阵。2行用回车分割,或用分号分割

cell(2,3) %创建2行3列元胞数组

c=cell(100,100) %对大型元胞数组,预分配内存

d={} %初始化后(也可不初始化,因Matlab使用变量不需提前声明,因此也可直接赋值)

d{100,100}=[] %用数组扩展的方式,将第100行第100列元素设置为空,其他未指定元素默认用空矩阵填充,完成预分配内存

iscell(a) %判断元胞数组

%% 元胞数组索引方法(可类比字符串数组索引)

b(1,3) %索引元胞数组的元素

b{1,3} %索引元胞数组的元素的内容

b{1,1:3} %索引1行1-3列元素,未指定输出变量,默认ans

[v1,v2,v3]=b{1,1:3} %索引3个元素值,并赋值给3个变量

v=b{1,1:3} %当仅指定1个输出变量,则只返回第1个值

b{1,3}(1:2) %二级索引

%% 元胞数组数据连接

%[b{1,1:3}] %维度不同无法连接

[b{1,1:2}] %2个索引到的元素,连接为1*2矩阵

%% 元胞数组转换:每个元胞元素类型相同且大小相同才可转换

%cell2mat(b) %b没有明确结果类型因此报错

m=cell2mat({1 2}) %数值型可以转换为矩阵

n=cell2mat({\’a\’,\’b\’})

%cell2mat({\”a\”,\”b\”}) %该转换函数不支持字符串数组

mat2cell(m,1) %第2个参数1表示1行1列元胞数组,将整个矩阵看做元胞数组元素

mat2cell(m,1,[1 1]) %第3个参数指定了列数为2列,每列个数分别为1

mat2cell(n,1)

mat2cell(n,1,[1 1])

1.35 元胞数组的修改

1.元胞数组的修改、添加、删除和连接

2.认识函数

连接[]和{}

3.说明

元胞数组的子数组或元素也是元胞型的,其元素内容是本身类型

4.实例演示

%1_35

%% 元胞数组修改

b={1,2,magic(3)

\’a\’,[\”a\”,\”b\”],[]} %理解:元胞数组是大箱子,用大括号表示,内部的元素是盒子,盒子也是元胞型,盒子与箱子遵循Matlab预设规则,能修改的就是打开盒子往里面装内容,内容可以是任意大小任意格式的内容。

% b(1,1)=100 %元胞数组数据修改,小括号索引出第1行第1列元胞型,100双精度型无法赋值(小括号索引到盒子),报错

b(1,1)={100} %赋值也应包装成盒子(元胞型)再赋值

b{1,1}=100 %(大括号索引到盒子的内容)所以使用任意数值赋值即可

%% 元胞数组添加、删除

b(3,4)={8} %b本身是2行3列,如此扩展为3行4列,第3行第4列为{8}其余扩展元素默认空矩阵填充

% b(1,1)=[] %报错,删除1个元素无法保持矩阵矩形

b(end,:)=[] %最后一行删除,可行

b{1,1}=[] %大括号索引到盒子里的内容,并置为空(删除),盒子仍存在

%% 元胞数组连接

%中括号连接:把元胞数组打开重排

[{1 2 3},{\’a\’}] %水平连接

% [{1 2 3};{\’a\’}] %列数不同,报错

[{1 2 3};{\’a\’,[],[]}] %列数相同

%大括号连接:元胞数组视为整体重排(可理解为元胞数组的嵌套,元胞数组内可容纳任意类型,包括元胞型自身)

{{1 2 3},{\’a\’}} %水平连接

{{1 2 3};{\’a\’}} %纵向排列

{{1 2 3},{\’a\’},{},[],string(missing),uint16(10)} %只要占用元胞数组内的盒子,都会显示

1.36 结构数组

1.结构数组的创建、索引和预分配内存

2.认识函数

创建struct

判断isstruct

运算符 .

3.概念

结构(structure array)是一种具有容器特性的数据类型,它使用称为字段的数据容器对相关数据进行分组,每个字段可以包含任何类型或大小的数据。(与元胞数组描述类似,都是容器型数据类型,组织结构不同)

matlab中数据类型定义(matlab默认的数值型数据类型)

包含1个元素的结构数组

matlab中数据类型定义(matlab默认的数值型数据类型)

包含2个元素的结构数组

4.创建方法(2种方法)

数组名.字段名=字段值,遍历所有字段名赋值

数组名=struct(‘字段名’,‘字段值’…)

5.说明

所有元素都具有相同数量的字段和相同的字段名称

字段未指定的默认值为[](默认为空矩阵,与元胞数组相同)

结构数组不需要完全连续的内存,但每个字段需要连续的内存

对于大型的结构数组,增加字段的数量或字段中数据的数量可能会导致Out of Memory错误

因此,必要时,结构数组需要初始化和预分配内存

6.实例演示

%1_36

%% 单元素结构数组创建

%方法1:(分别列出字段信息,元素名与字段信息用圆点(.)分隔)

student.xingming=\’zhangsan\’; %student是结构数组名,后跟字段名,等号右侧为字段值

student.xuehao=\’00001\’;

student.chengji=[1 2 3;4 5 6]

%方法2:(struct函数创建,分别列出每条字段信息,最后赋值给变量名)

stu=struct(\’xingming\’,\’zhangsan\’,\’xuehao\’,\’00001\’,\’chengji\’,[1 2 3;4 5 6])

%单元素结构数组的操作

isstruct(stu) %判断结构数组

stu.chengji %字段索引

stu.chengji(1:3)%2级索引,与元胞数组类似

%% 多元素结构数组

%方法1:(在前面基础上添加)

student(2).xingming=\’lisi\’;

student(2).xuehao=\’00002\’;

student(2).chengji=[7 8 9;1 2 3]

%方法2:

stu(2)=struct(\’xingming\’,\’zhangsan\’,\’xuehao\’,\’00001\’,\’chengji\’,[1 2 3;4 5 6])

%多元素结构数组操作

student.chengji %若不指定哪个元素,则显示所有该字段名的值

student(2).chengji %指定第2个元素,显示该元素的该字段值

% student.chengji(1:3) %2个及以上元素的结构数组不能直接使用二级索引,因未指定元素,无法确定索引的结果

student(2).chengji(1:3)

%预分配内存

st(100,100)=struct(\’a\’,[]) %边界思想,设置结构数组的边界元素为字段名为\’a\’且字段值为[]的结构数组,其他元素值默认填充为空[]

st.a %索引st的字段\’a\’,返回100个空矩阵

1.37 结构数组的处理

1.结构数组的连接、嵌套、引用变量值和访问字段值

2.说明

结构数组必须具有相同的字段名才能连接,元素数目可以不同

为某元素添加字段,其他所有元素也具有了该字段,默认值为[]

3.实例演示

%1_37

%freexyn

%创建3个结构数组student/stu/st

student.xingming=\’zhangsan\’;

student.xuehao=\’00001\’;

student.chengji=[1 2 3;4 5 6];

stu=struct(\’xingming\’,\’zhangsan\’,\’xuehao\’,\’00001\’,\’chengji\’,[1 2 3;4 5 6]);

student(2).xingming=\’lisi\’;

student(2).xuehao=\’00002\’;

student(2).chengji=[7 8 9;1 2 3]

stu(2)=struct(\’xingming\’,\’zhangsan\’,\’xuehao\’,\’00001\’,\’chengji\’,[1 2 3;4 5 6])

st(100,100)=struct(\’a\’,[])

%% 结构数组的连接

[student,stu] %同为1*2结构数组,并且字段名相同,结果为1*4结构数组

% [student,st] %维度不同且字段名不同,报错

%% 嵌套

student(1).stu=stu %嵌套,理解:创建字段名stu,并把原结构数组stu作为字段值赋值给该字段名。给结构数组student的第1个元素student(1)添加stu字段,其他所有元素(如student(2))也会具有该字段

student(1).stu %索引,第1个元素的stu字段名里的字段值(字段内容),结果为原stu数组

student(2).stu %索引,结果是空矩阵,因为未指定该字段的值

%多级索引打开内部嵌套的字段值(理解:结构数组的索引,用圆点运算符(.)层层打开字段值,访问所需内容)

student(1).stu(1) % student第一个元素的stu字段的第一个元素的值

student(1).stu(1).chengji %进一步获取该元素的chengji字段的值

student(1).stu(1).chengji(1:3) %进一步获取成绩值的第1-3元素

%% 预留字段(添加新字段)

yuliuziduan=\’nianling\’ %通过预留变量名的形式,给元素添加字段,字段名的赋值需字符型。

stu(1).(yuliuziduan)=\’nan\’ %给包含多个元素的结构数组通过小括号+预留变量名的方式添加字段时,要指定具体元素,等号右侧赋字段值

%用途:当后面需要修改字段名时,不需再每处修改,而只修改预留变量所赋的值即可,树状图思想,预留变量作为中间值

stu(1).(yuliuziduan) %小括号引用该预留变量代表的字段名,并索引该字段名的字段值,即nan

%% 获取结构数组字段值

student.chengji %索引student所有元素的chengji字段的值

v=student.chengji %当只有一个输出参数v时,只返回第1个值

[v1,v2]=student.chengji %若返回所有字段值,则指定相同个数的输出参数

v=[student(1).chengji,student(2).chengji] %将多字段值存储在同一矩阵中,则先将字段值提取再矩阵连接。要求字段值数据类型相同,横纵连接符合矩阵连接的维度要求

1.38 表

1.表类型数据的创建、索引和自身属性的用法

matlab中数据类型定义(matlab默认的数值型数据类型)

3*3 table数组

2.认识函数

创建table

判断istable

属性.Properties

3.概念

表(table)具有容器特性的数据类型,可以方便的存储混合类型的数据,可以使用数字或命名索引访问数据以及元数据(例如变量名称,行名称,描述和变量单位等)

4.说明

表由行和列组成

通常,表的列代表不同的变量,行代表不同的变量值

不同变量须具有相同数量的变量值,即行数须相同,否则不完整

表的索引方法有两种,下标索引和字段索引

5.实例演示

%1_38

%:freexyn

%% 表格创建

xingming={\’zhangsan\’;\’lisi\’;\’wangwu\’} %用元胞数组的形式,创建表的每一列

xuehao={\’1001\’;\’1002\’;\’1003\’}

chengji=[89 95;90 87;88 84]

t=table(xingming,xuehao,chengji) %表格的创建:table函数+小括号输入变量

istable(t) %判断

%% 表格索引

t(1:2,2:end) %下标索引:1-2行,2-最后一列

t.xingming %字段索引:索引该字段(列名称)所指向的整列数据

t.chengji(2,1) %组合索引:成绩字段里第2行第1列

t.age=[20;19;21] %使用字段索引为表格添加变量(字段)名称,并赋值。默认添加至最后一列

size(t) %表格维度

%% 表格属性的应用

t.Properties %.表格的属性数据,是结构数组

t.Properties.VariableNames %二级索引获取属性里的变量名称

t.Properties.RowNames={\’1\’,\’2\’,\’3\’} %给行名称赋值。注:赋值应与属性值数值类型相同(属性是元胞数组,则赋值也以元胞数组形式)

%用途:赋予行名称后,可以作为索引使用

t(\’1\’,\’xuehao\’) %索引1行xuehao列的数据,形式类似于下标索引,下标即矩阵下标ij,而该索引以行与列的名称索引。

t(1,2) %下标索引,1行2列

t({\’1\’,\’2\’},{\’xingming\’,\’age\’})

1.39 表的数据处理

1.表的编辑(排序查找提取删除)、计算、与结构数组转换

2.认识函数

统计summary

与结构数组转换table2struct、struct2table

与元胞数组转换table2cell、cell2table

3.实例演示

%1_39

xingming={\’zhangsan\’;\’lisi\’;\’wangwu\’};

xuehao={\’1001\’;\’1002\’;\’1003\’};

chengji=[89 95;90 87;88 84];

t=table(xingming,xuehao,chengji)

%% 表格的统计

summary(t) %无法统计字符型元胞数组,可以对chengji双精度型进行统计处理(按列统计)

mean(t.chengji) %字段索引再mean函数(默认维度按列即字段名求均值)

mean(t.chengji,2) %2表示第2维度即按行求均值

t.pingjunzhi=mean(t.chengji,2) %使用字段索引并赋值

%% 表的排序、查找

sortrows(t,\’xingming\’) %按行排序,表格t按字段\’xingming’按字母升序

t(:,[1 2 4 3]) %用索引排序:任意行,列将3和4列互换

% t.pingjunzhi=[] %删除,用字段索引赋空值删除该列

tf=t.pingjunzhi>90 %查找平均值大于90的学生信息,返回逻辑值;

t(tf,:) %使用tf作为逻辑索引,索引表格中符合条件的学生的信息

%% 数据转换

t

s=table2struct(t) %表格转换为结构数组后,每一行都变为1个元素,因此是3行1列的结构数组

s(1) %第1个元素的值

struct2table(s) %反向转换

c=table2cell(t) %表格转换为元胞数组后,变量名称消失,变量值转换为元胞数组,其中多列的双精度值会自动拆分为多个单列表示

cell2table(c) %反向转换

1.40 表的读入写出

1.表与外部文件的读入和写出

2.认识函数

读入readtable

写出writetable

3.实例演示

%1_40

xingming={\’zhangsan\’;\’lisi\’;\’wangwu\’};

xuehao={\’1001\’;\’1002\’;\’1003\’};

chengji=[89 95;90 87;88 84];

t=table(xingming,xuehao,chengji)

writetable(t,\’student.txt\’) %写出数据到txt文件

stu=readtable(\’student.txt\’) %从txt文件读入数据

stu.chengji=[stu.chengji_1,stu.chengji_2] %上面写出再读入后,多列数据自动拆分,把拆分后的数据恢复成原先数据

stu.chengji_1=[]

stu.chengji_2=[]

writetable(t,\’student.xls\’) %写出数据到Excel文件

stu=readtable(\’student.xls\’) %从Excel文件读入数据

1.41 日期时间型

1. 日期时间型的概念及其简单应用

2.认识函数

日期时间datetime

持续时间duration

3.概念

日期时间型(Dates and Time)数据具有灵活的显示格式和高达毫微秒的精度,并且可以处理时区、夏令时和平闰年等特殊因素

日期时间型数据有以下三种表示方式

Datetime型,表示日期时间点,是存储日期和时间数据的主要方法,它支持算术运算,排序,比较,绘图和格式化显示

Duration型,表示日期时间的持续长度

CalendarDuration型(略)

4.实例演示

%1_41

%freexyn

datetime(2018,8,8) %创建日期时间型,输入参数为:年、月、日

t=datetime(2018,8,8,12,0,0) %输入参数为:年、月、日、时、分、秒

d=duration(3,2,0) %创建持续时间型,时长3小时2分0秒

years(1)

days(1)

hours(1)

%% 运算

t2=t+d %时间点和持续时间的运算结果仍为时间点

t3=t-d

t-days(4)

hours(1)+minutes(30)

t2>t %时间点的比较,时间越晚,则越大

t3>t

hours(1)>minutes(30) %持续时间的比较,时间越长,则越大

%% 显示格式

t %时间点的显示格式设置

datetime(t,\’Format\’,\’y-MM-dd\’) %时间点显示格式,使用format属性设置

datetime(t,\’Format\’,\’y-MM-dd HH:mm:ss eeee\’) %y M d H m s e分别代表年、月、日、时、分、秒、星期

d %持续时间显示格式设置

duration(d,\’Format\’,\’m\’) %m表示分钟,另外,h表示小时、s表示秒

%% 补充

[y m d]=ymd(t) %函数ymd获取时间点t中的年月日信息赋值给相应变量,另外,时分秒hms同理

dateshift(t,\’start\’,\’day\’,0:2) %时间推移方法获取时间序列,start表示返回一天的起点即0点,0:2推移2天

char(t) %日期时间型转换为字符型,转换后可用字符型规则处理数据

NaT %datetime型的数据,表示非时间,即缺失值。

1.42 缺失数据的处理

1.各类型缺失数据的创建、判断、替换、移位和处理方法

2.认识函数

替换standardizeMissing

替换为fillmissing

位置\’MissingPlacement\’

忽略\’omitnan\’

移除rmmissing

3.实例演示

%1_42

%% 各类数据缺失值的创建

a=[nan 1 2 3] %数值型缺失值

s=[string(missing) \”a\” \”b\”] %字符串型缺失值

t=[NaT datetime(2018,8,8)] %时间型缺失值

%missing函数可创建不同数值类型的缺失值

aa=[missing 1 2 3]

ss=[missing \”a\” \”b\”]

tt=[missing datetime(2018,8,8)]

isnan(a) %判断数值型

ismissing(a) %判断缺失值

ismissing(s)

ismissing(t)

%% 缺失值的替换

standardizeMissing(a,[2 missing]) %变量中参数替换为缺失值

standardizeMissing(s,[\”b\” missing])

standardizeMissing(t,[datetime(2018,8,8) missing])

fillmissing(a,\’constant\’,0) %变量中缺失值替换成参数,\’constant\’和0表示把缺失值替换为常数0

fillmissing(s,\’constant\’,\”fill\”)

fillmissing(t,\’constant\’,datetime(2019,9,9))

%% 缺失值的移位(排序)

sort(a,\’MissingPlacement\’,\’last\’) %把变量a中的缺失值移位到最后

%% 缺失值的运算

max(a) %忽略nan求最大值

sin(a) %nan的sin值就是nan

sum(a) %求和返回nan值

sum(a,\’omitnan\’) %忽略nan

sum(rmmissing(a)) %移除a中的缺失值

1.43 类型识别

1.判断数据的类型和类别

例如数值型(整数、浮点数、实数、无穷数、有限数、nan等)、字符(串)型、结构数组、元胞数组、表、函数句柄等

2.认识函数

变量信息whos

类型class

无穷大isinf

非值isnan

数值型isnumeric

实数isreal

有限值isfinite

综合判断isa

字符向量元胞数组iscellstr

3.简单总结数据类型

Matlab的基本类型(16个)

matlab中数据类型定义(matlab默认的数值型数据类型)

4.实例演示

%1_43

%freexyn

x=1

whos x

class(x)

isnan(x)

isnan(nan)

isinf(x)

isinf(1e309)

isnumeric(x)

isnumeric(\’a\’)

isreal(x)

isreal(1+2i)

isfinite(x)

isfinite(1e309)

isa(x,\’numeric\’) %判断数值型

isa(x,\’integer\’) %判断整数

isa(int16(1),\’integer\’) %判断int16(1)是否为整数

isa(x,\’int8\’) %判断x是否为8位整型

isa(int8(1),\’int8\’)

isa(x,\’float\’) %判断浮点型

isa(x,\’double\’) %判断双精度浮点型

isa(x,\’single\’) %判断单精度浮点型

isa(x,\’logical\’) %判断逻辑型

isa(true,\’logical\’)

isa(x,\’char\’) %判断字符型

isa(\’a\’,\’char\’)

isa(x,\’string\’) %判断字符串型

isa(\’a\’,\’string\’)

isa(\”b\”,\’string\’)

isa(x,\’struct\’) %判断结构数组

isa(x,\’table\’) %判断表数组

isa(x,\’cell\’) %判断元胞数组

isa(x,\’function_handle\’) %判断函数句柄

isa(x,\’datetime\’) %判断日期时间型

isdatetime(x)

iscellstr({\’11\’}) %判断元胞数组是否由字符构成(是)

iscellstr({11}) %同上(不是,是双精度数值)

(第四章下结束,后接第五章)

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 5733401@qq.com 举报,一经查实,本站将立刻删除。本文链接:https://fajihao.com/i/71885.html

(0)
星空的头像星空
上一篇 2022-08-31
下一篇 2022-08-31

相关推荐