表由若干行变量和若干列变量组成。表格中的每个变量都可以具有不同的数据类型和大小,但有一个限制条件:每个变量的行数必须相同。[大谦MATLAB,dqmatlab点com]

创建表

用table函数可以根据已有的变量创建表,也可以用readtable函数根据文件创建表。

1.根据工作区变量创建表

【例2-68】

先创建具有相同行数的工作区变量。

code.matlab
ID = {'1';'2';'3';'4'};
Name = {'张三';'李四';'杨二';'王五'};
Age = [18;19;17;20];
Height = [162;169;164;167];
Weight = [116;103;131;133];

然后用table函数创建表。下面用'RowNames'名称-值匹配对指定各行的名称为ID的值。

code.matlab
T=table(Name,Age,Height,Weight, 'RowNames',ID)
T =
         Name    Age    Height    Weight
         ____    ___    ______    ______
    1    '张三'    18     162       116
    2    '李四'    19     169       103
    3    '杨二'    17     164       131
    4    '王五'    20     167       133

2.创建表的内容并指定变量名称

【例2-69】

先创建表的内容,然后用'VariableNames'名称-值匹配对指定变量名。

code.matlab
T = table(categorical({'张三';'李四';'杨二';'王五'}),{'M';'F';'M';'F'},[18;19;17;25],...
    [162;169;164;167],logical([0;0;0;1]),...
    'VariableNames',{'Name' 'Gender' 'Age' 'Height' 'Married'})
T =
    Name    Gender    Age    Height    Married
    ____    ______    ___    ______    _______
    张三    	  'M'   	18     162       false
    李四    	  'F'     	19     169       false
    杨二     	 ' M'     	17     164       false
    王五     	  'F'    	25     167       true

3.用对象引用方式创建表

【例2-70】

这种方式是先创建一个空的table对象,然后用对象引用方式逐个指定变量名称和值。

在命令窗口中输入:

code.matlab
ID = {'1';'2';'3';'4'};
Name = {'张三';'李四';'杨二';'王五'};
Age = [18;19;17;20];
Height = [162;169;164;167];
Weight = [116;103;131;133];
T=table;
T.ID=ID;
T.Name=Name;
T.Age=Age;
T.Height=Height;
T.Weight=Weight
T =
    ID     Name    Age    Height    Weight
    ___    ____    ___    ______    ______
    '1'    '张三'    18     162       116
    '2'    '李四'    19     169       103
    '3'    '杨二'    17     164       131
    '4'    '王五'    20     167       133

4.用readtable函数创建表

【例2-71】

先用记事本程序创建一个包括表数据的文本文件,如图2-4所示。将文件保存在MATLAB安装目录的examples\matlab子目录下,名为demo.dat。

Document Image

图2-4 包含表数据的文本文件

在命令窗口中输入:

code.matlab
filename = fullfile(matlabroot,'examples','matlab','demo.dat');
T=readtable(filename)

生成表:

code.matlab
T =
    ID    Name    Age    Height    Weight
    __    ____    ___    ______    ______
    1     '张三'    18     162       116
    2     '李四'    19     169       103
    3     '杨二'    17     164       131
    4     '王五'    20     167       133

使用writetable函数,可以将表写入文件中。

表的运算与关联

在MATLAB中,可以很方便地进行表的交、差、异或和并运算。

【例2-72】

创建如下两个表。

code.matlab
A = table(categorical({'1';'2';'3';'4'}),{'张三';'李四';'杨二';'王五'},{'M';'F';'M';'F'},[18;19;17;25],...
    [162;169;164;167],logical([0;0;0;1]),...
    'VariableNames',{'ID' 'Name' 'Gender' 'Age' 'Height' 'Married'})
A =
    ID    Name    Gender    Age    Height    Married
    __    ____    ______    ___    ______    _______
    1     '张三'    'M'       18     162       false
    2     '李四'    'F'       19     169       false
    3     '杨二'    'M'       17     164       false
    4     '王五'    'F'       25     167       true
B = table(categorical({'3';'6';'8';'10'}),{'杨二';'赵旭';'东方允';'夏东'},{'M';'M';'M';'M'},[17;20;18;23],...
    [164;159;162;165],logical([0;0;0;1]),...
    'VariableNames',{'ID' 'Name' 'Gender' 'Age' 'Height' 'Married'})
B =
    ID    Name     Gender    Age    Height    Married
    __    _____    ______    ___    ______    _______
    3     '杨二'     'M'       17     164       false
    6     '赵旭'     'M'       20     159       false
    8     '东方允'    'M'       18     162       false
    10    '夏东'     'M'       23     165       true

1.求两个表的交集

下面用intersect函数求两个表的交集。

code.matlab
C=intersect(A,B)
C =
    ID    Name    Gender    Age    Height    Married
    __    ____    ______    ___    ______    _______
    3     '杨二'    'M'       17     164       false

2.求两个表的差集

下面用setdiff函数求两个表的差集。表A和表B的差集,是从表A中删除表A和表B交集的结果。

code.matlab
C=setdiff(A,B)
C =
    ID    Name    Gender    Age    Height    Married
    __    ____    ______    ___    ______    _______
    1     '张三'    'M'    	18   	162     	false
    2     '李四'    'F'       	19     	169      	false
    4     '王五'    'F'       	25     	167      	true

3.求两个表的并集

下面用union函数求两个表的并集。

code.matlab
C=union(A,B)
C =
    ID    Name     Gender    Age    Height    Married
    __    _____    ______    ___    ______    _______
    1     '张三'     'M'     	18		162    	false
    2     '李四'     'F'      	19  		169      	false
    3     '杨二'     'M'     	17  		164      	false
    4     '王五'     'F'     	25     	167      	true
    10    '夏东'     'M'     	23     	165      	true
    6     '赵旭'     'M'     	20     	159      	false
    8     '东方允'   'M'     	18     	162      	false

4.求两个表的异或

下面用setxor函数求两个表的异或。两个表的异或操作结果,是不在两个表的交集中的数据,不包括重复项。

code.matlab
C=setxor(A,B)
C =
    ID    Name     Gender    Age    Height    Married
    __    _____    ______    ___    ______    _______
    1     '张三'     'M'     	18    	162     	false
    2     '李四'     'F'      	19     	169     	false
    4     '王五'     'F'      	25    	167     	true
    10    '夏东'     'M'     	23     	165      	true
    6     '赵旭'     'M'     	20     	159     	false
    8     '东方允'   'M'     	18     	162      	false

表的转换

下面用array2table函数和table2array函数实现表与数组之间的转换。

【例2-73】

对于数组A:

code.matlab
A=[1 2 3;4 5 6;7 8 9]
A =
     1     2     3
     4     5     6
     7     8     9

用array2table函数将数组A转换为表。

code.matlab
T=array2table(A)
T =
    A1    A2    A3
    __    __    __
    1     2     3
    4     5     6
    7     8     9

对于表T:

code.matlab
T = table([1;2;3],[2 5; 6 9; 6 10], 'VariableNames',{'One' 'Two'})
T =
    One      Two
    ___    _______
    1      2     5
    2      6     9
    3      6    10

用table2array函数将表T转换为数组。

code.matlab
A=table2array(T)
A =
     1     2     5
     2     6     9
     3     6    10

表与时间表、结构和单元数组之间的转换函数如表2-11所示。

表2-11 表与时间表、结构和单元数组之间的转换函数

函 数 说 明
cell2table 将单元数组转换为表
struct2table 将结构转换为表

续表

函 数 说 明
table2cell 将表转换为单元数组
table2struct 将表转换为结构
timetable2table 将时间表转换为表
table2timetable 将表转换为时间表