>第2.5节,构造函数和类的名称相同)。在containers.Map的介绍中,我们举了电话号码簿的例子,如表Table.3所示,它是我们这节要构造的table对象的原始数据
Table.3 电话号码簿姓名
电话号码
Abby
5086470001
Bob
5086470002
Charlie
5086470003
下面程序中第1,2行用元胞数组来表示表中每一列的数据,第3行规定了表头的名称,第4行调用table的构造函数创建table对象,先输入数据,再输入表头的名称。表头通过table对象的VariableNames属性来设置。
name={'Abby';'Bob';'Charlie'}; % 3x1列向量
number={'5086470001';'5086470002';'5086470003'}; % 3x1列向量
colName={'Name','Number'};
phonetable=table(name,number,'VariableNames',colName)
命令行显示如下
% phonetable在命令行中disp的结果
phonetable =
Name Number
_________ ____________
'Abby' '5086470001'
'Bob' '5086470002'
'Charlie' '5086470003'
第4行把Name和Number做为table对象的VariableNames,可以这样理解VariableNames,我们可以把table看成由一个个列数据组成的数据结构,每列都是矢量,其中存放相同类型的数据。如果一个table有两列,它就有两个列矢量,每个列矢量都是table的一个变量(Variable),给变量名字就是Variable Name。
通过转换函数构造table对象
除了使用table的构造函数来创建table对象,还可以使用转换函数把其它数据类型转成table,下列通过数组数据类型类构造table。下面的程序的1-2行,我们利用financial工具箱中的fetch函数,从Yahoo财经处得到雅虎从3月1日到3月10日的股票价格,fetch函数将返回一个数组,第3行我们利用array2table转换函数把得到数组转成table。
% 通过array2table创建table对象
conn = yahoo;
array = fetch(conn,'YHOO','3/1/2015','3/10/2015');
yhoo = array2table(array,...
'VariableNames', {'date','open','high','low','closing','volumn','adjusted'})
第4行中,我们通过VariableName来指定表头的内容,结果显示如下
% yhoo的table在命令行的显示
yhoo =
date open high low closing volumn adjusted
__________ _____ _____ _____ _______ __________ ________
7.3603e+05 42.57 42.92 42.18 42.68 1.0601e+07 42.68
7.3603e+05 43.6 43.93 42.67 42.98 1.1802e+07 42.98
7.3603e+05 43.98 44.24 43.4 43.44 1.1888e+07 43.44
7.3603e+05 44.18 44.31 43.5 44.16 1.1868e+07 44.16
7.3603e+05 42.08 44.38 41.97 43.99 3.0099e+07 43.99
7.3603e+05 43.7 43.95 42.42 42.62 2.2392e+07 42.62
7.3603e+05 44.06 44.43 43.7 44.11 1.1027e+07 44.11
访问table中的数据
通过表Table.1所建立的table对象,在命令行中显示如下:
% nasdaq table在命令行中的显示
nasdaq =
Symbol Name MarketCap IPOYear
______ _______________________ __________ _______
'AAPL' 'Apple Inc' '$742.63B' 1980
'AMZN' 'Amazon.com Inc' '$173.33B' 1997
'MSFT' 'Microsoft Corporation' '$346.9B' 1986
我们可以通过使用dot+Variablename的语法直接访问table中的列,返回的结果是cell格式的数据:
% 使用dot语法访问table中的数据
>> nasdaq.Symbol % dot格式+变量名的访问方式
ans =
'AAPL'
'AMZN'
'MSFT'
>> class(nasdaq) % 返回cell格式的数据
ans =
cell
table类重载了subsref函数(什么是运算符的重载,参加《MATLAB面向对象编程-从入门到设计模式》12.1节),于是支持MATLAB传统的圆括号下标访问,如果要访问第一行,则:
% 使用下标语法访问table中的数据
>> nasdaq(1,:)
ans =
Symbol Name MarketCap IPOYear
______ ___________ __________ _______
'AAPL' 'Apple Inc' '$742.63B' 1980
使用圆括号,返回的结果仍然是table,如果要访问第2到3行,则:
% 使用下标语法访问table中的数据
>> nasdaq(2:3,:)
ans =
Symbol Name MarketCap IPOYear
______ _______________________ __________ _______
'AMZN' 'Amazon.com Inc' '$173.33B' 1997
'MSFT' 'Microsoft Corporation' '$346.9B' 1986
返回的结果仍然是table。
table数据结构支持MATLAB传统的花括号下标访问,返回的结果是cell格式的数据
% 花括号下标访问
>> nasdaq{:,1} % 花括号下标访问,返回第一列中的数据
ans =
'AAPL'
'AMZN'
'MSFT'
还可以把Dot语法和下标语法结合起来获取数据,下例代码访问table第一列的第三行,返回的结果是元胞。
% Dot语法和圆括号下标访问结合
>> nasdaq.Symbol(3)
ans =
'MSFT'
>> class(ans) % 圆括号下标访问,返回结果是元胞
ans =
cell
图Figure.1中以表Table.1中的数据为例,总结了几种访问table中不同区域的数据的方法。
Figure.1 访问table中的数据
关于作者
oopmatlab,计算物理博士,计算机硕士,声明:
本文内容所有内容仅代表个人观点,如有任何问题,请联系作者。
本版块所有文章版权归作者个人所有,未经允许,不得作为出版物出版。如需转载,请联系论坛管理员。