感谢大家关注matlab爱好者,今天大家介绍matlab复杂数据类型第二部分,有关表的使用以不同数据类型的识别与转换。最后补充有关函数句柄转字符和字符转函数句柄的相关内容。在公众号聊天栏输入“014”、 "表" 或“转换” 即可快速获取本篇内容。欢迎大家分享本文。
1 表
table是一种适用于以下数据的数据类型:即以列的形式存储在文本文件或电子表格中的列向数据或者表格式数据。表由若干行向变量和若干列向变量组成。表格中的每个变量可以具有不同的数据类型和大小,但有一个限制条件是每个变量的行数必须相同。
① 表的创建:使用table命令来创建表,T = table(var1,...,varN,Name,Value)
(a) 创建表并指定变量名称
例1.1
T = table([10;20],{'M';'F'},'VariableNames',…
{'Age','Gender'},'RowNames',{'P1','P2'})
结果:
T =
Age Gender
___ ______
P1 10 'M'
P2 20 'F'
(b) 根据工作区变量创建表
例 1.2
LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
Age = [38;43;38;40;49];
Height = [71;69;64;67;64];
Weight = [176;163;131;133;119];
BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
T = table(Age,Height,Weight,BloodPressure,...
'RowNames',LastName);
(c) 创建将字符串数组作为变量的表
例 1.3
FlightNum = [1261;547;3489];
Customer = string({'Jones';'Brown';'Smith'});
Date = datetime(2016,12,20:22)';
Rating = categorical({'Good';'Poor';'Fair'});
Comment = string({'Flight left on time, not crowded';...
'Late departure, ran out of dinner options';...
'Late, but only by half an hour. Otherwise fine.'});
T = table(FlightNum,Customer,Date,Rating,Comment)
(d) 通过分别指定变量来生成表
例 1.4
Date = {'12/25/11','1/2/12','1/23/12','2/7/12','2/15/12'};
location1 = [20 5 13 0 17];
location2 = [18 9 21 5 12];
location3 = [26 10 16 3 15];
T = table;
T.Date = Date';
T.Natick = location1';
T.Boston = location2';
T.Worcester = location3'
(e) 基于文件创建表
T = readtable(filename) 通过从文件中读取列向数据来创建表。
readtable基于文件的扩展名确定文件格式:
.txt、.dat 或 .csv(适用于带分隔符的文本文件)
.xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)
② 表的访问
表是一个容器,用于存储具有相同行数的列向变量。使用括号可以选择表中的一个数据子集并保留表容器。使用大括号和点索引可以从表中提取数据。如果使用大括号,则生成的数组是将仅包含指定行的指定表变量水平串联而成的。所有指定变量的数据类型必须满足串联条件。点索引从一个表变量中提取数据。结果是与所提取变量具有相同数据类型的一个数组。可以在点索引后使用括号指定一个行子集来提取变量中的数据。例如:T.Variables 可将所有表变量都水平串联到一个数组中。T.Variables 等效于 T{:,:}。
索引类型 | 结果 | 语法 | 行 | 变量 |
---|---|---|---|---|
括号 | 表 | T(rows,vars) | 一行或多行,由 rows 指定 | 一个或多个变量,由 vars 指定 |
大括号 | 提取的数据 | T{rows,vars} | 一行或多行,由 rows 指定 | 一个或多个变量,由 vars 指定 |
点索引 | 提取的数据 | T.varT.(varindex) | 所有行 | 一个变量,由 var(名称)或 varindex(数值)指定 |
点索引 | 提取的数据 | T.var(rows) | 一行或多行,由 rows 指定 | 一个变量,由 var(名称)指定 |
Variables 属性 | 提取的数据 | T.Variables | 所有行 | 所有变量(当它们可以水平串联到数组中时) |
按变量类型添加下标 | 表 | S = vartype(type);T(rows,S) | 一行或多行,由 rows 指定 | 一个或多个具有指定 type(例如 'numeric')的变量 |
按变量类型添加下标 | 提取的数据 | S = vartype(type);T{rows,S} | 一行或多行,由 rows 指定 | 一个或多个具有指定 type(例如 'numeric')的变量 |
③ 数据类型转换
table:具有命名变量的表数组(变量可包含不同类型的数据)
array2table:将同构数组转换为表
cell2table :将元胞数组转换为表
struct2table:将结构体数组转换为表
table2array:将表转换为同构数组
table2cell :将表转换为元胞数组
table2struct:将表转换为结构体数组
④ 使用表的优势
方便将混合类型的数据存储于单个容器中。可以使用table数据类型来将混合类型的数据和元数据属性(例如变量名称、行名称、说明和变量单位)收集到单个容器中。表适用于列向数据或表格数据,这些数据通常以列形式存储于文本文件或电子表格中。还可以使用表存储试验数据,使用行表示不同的观测对象,使用列表示不同的测量变量。
2 数据类型标识
iscalendarduration:确定输入是否为日历持续时间数组
iscategorical:确定输入是否为分类数组
iscell:确定输入是否为元胞数组
iscellstr:确定输入是否为字符向量元胞数组
ischar:确定输入是否为字符数组
isdatetime:确定输入是否为日期时间数组
isduration:确定输入是否为持续时间数组
isenum:确定变量是否为枚举
isfloat:确定输入是否为浮点数组
isgraphics:对有效的图形对象句柄为True
isinteger:确定输入是否为整数数组
isjava:确定输入是否为Java对象
islogical:确定输入是否为逻辑数组
isnumeric :确定输入是否为数值数组
isobject:确定输入是否为 MATLAB 对象
isreal:确定数组是否为实数数组
isstring:确定输入是否为字符串数组
isstruct:确定输入是否为结构体数组
istable:确定输入是否为表
istimetable:确定输入是否为时间表
is*:检测状态
isa:确定输入是否为指定类的对象
class:确定对象类
validateattributes:检查数组的有效性
whos:列出工作区中的变量及大小和类型
3 数据类型转换
数值数组、字符数组、元胞数组、结构体或表格之间的转换。
char:字符数组
cellstr:转换为字符向量元胞数组
int2str:将整数转换为字符
mat2str:将矩阵转换为字符
num2str:将数字转换为字符数组
str2double:将字符串转换为双精度值
str2num:将字符数组转换为数值数组
native2unicode:将数值字节转换为Unicode 字符表示形式
unicode2native:将 Unicode 字符表示形式转换为数值字节
base2dec:将以 N 为基数表示数字的文本转换为十进制数字
bin2dec:将用文本表示的二进制数字转换为十进制数字
dec2base :将十进制数字转换为以 N 为基数的数字的字符向量
dec2bin:将十进制数字转换为表示二进制数字的字符向量
dec2hex:将十进制数字转换为表示十六进制数字的字符向量
hex2dec:将十六进制数字的文本表示形式转换为十进制数字
hex2num:将IEEE十六进制字符串转换为双精度数字
num2hex:将单精度和双精度值转换成 IEEE 十六进制字符串
table2array:将表转换为同构数组
table2cell:将表转换为元胞数组
table2struct:将表转换为结构体数组
array2table:将同构数组转换为表
cell2table :将元胞数组转换为表
struct2table:将结构体数组转换为表
cell2mat:将元胞数组转换为基础数据类型的普通数组
cell2struct:将元胞数组转换为结构体数组
mat2cell:将数组转换为可能具有不同元胞大小的元胞数组
num2cell:将数组转换为相同大小的元胞数组
struct2cell:将结构体转换为元胞数组
4 特别补充
特别补充有关函数转字符(func2str)和字符转函数(str2func)的用法
(a) func2str:基于函数句柄构造字符向量。
c = func2str(fh),构造字符向量 c,该字符向量包含与函数句柄 fh 相关联的函数的名称。如果 fh 与匿名函数相关联,则 func2str 返回表示该匿名函数的字符向量。
例 4.1
fh = @(x,y)sqrt(x.^2+y.^2);
c = func2str(fh)
c =
@(x,y)sqrt(x.^2+y.^2)
提示:如果使用func2str将函数句柄转换为字符向量,然后使用str2func将其重新转换回句柄,将丢失该函数句柄中原来存储的变量。
(b) str2func:根据字符向量构造函数句柄。
fh = str2func(str),根据函数名称或匿名函数的文本表示来构造函数句柄fh。使用str2func 创建的函数句柄不具备对其局部工作区外部的变量或嵌套函数的访问权限。如果函数句柄包含这些变量或函数,则当调用该句柄时,将会引发错误。而且,如果使用匿名函数的文本表示形式,则生成的函数句柄也不具备对私有函数或局部函数的访问权限。
例 4.2:将字符向量转换为函数句柄,字符需要有实际函数对应才能使用。
c = 'ones';
fh = str2func(c);
fh(1,5)
ans =
1 1 1 1 1
例 4.3:将字符向量转换为匿名函数的句柄
str = '@(x)7*x-13';
fh = str2func(str);
fh(3)
ans =
8
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。