tablematlab中table数据类型创建调用访问_第1页
tablematlab中table数据类型创建调用访问_第2页
tablematlab中table数据类型创建调用访问_第3页
tablematlab中table数据类型创建调用访问_第4页
tablematlab中table数据类型创建调用访问_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MATLAB table数据结构 目录:· 关于作者· table简介o 为什么需要table数据结构o 通过导入数据构造table对象 o 调用table构造函数来构造table对象o 通过转换函数构造table对象 · 访问table中的数据MATLAB常用基本数据类型有:整型,浮点型,字符型,函数句柄,元胞数组和结构体数组。除了这些基本数据类型,MATLAB还有很多其它的数据类型不为人熟悉,这些数据类型在编程中也非常有用。MATLAB高级数据类型系列旨在向大家介绍它们:比如containers.Map, tables,enumeration和time ser

2、ies等等,它们为什么有用,用来解决什么问题,并且怎样在科学工程计算中怎么使用。上篇我们提到了映射表结构(containers.Map )。本篇将介绍另一中新的MATLAB数据类型-table。table简介为什么需要table数据结构MathWorks在MATLAB R2013b中引入了一种新的数据结构叫做table 。table类似统计 工具箱中的dataset ,其引入的目的就是用来取代dataset的数据类型。因为表状的数据在工程计算中越来越长久,有了table 类型,MATLAB用户就可以不用购买统计工具箱,也能使用表状的数据结构了。 table本质上来说是一种可以存放各种数据类型的

3、容器,比如下面表Table.1中的数据,其中既有字符型,又有数值类型,其中第一行作为表头:Symbol,Name,Market,Cap,IPO, Year是各列的名字。 Table.1 NASDAQ股票名称表 SymbolNameMarket CapIPO YearAAPLApple Inc$742.63B1980AMZNA, Inc$173.33B1997MSFTMicrosoft Corporation$346.9B1986 在conatiners.Map的章节中,我们介绍了MATLAB的基本数据类型(比如数组,原胞数组和结构体)在表达某些复杂数据类型时的局限性。这里不再一一赘述,读者只需

4、要认识到:数组的局限性在于不能用来存放数值以外的数据,而使用元胞读取和索引内容时有种种不方便,比如无法区分该数据中的表头和其余的行数据。事实上,如果数据存放在如下的CSV文件中,并且用importdata 直接读取表Table.2中的CSV文件。 "Symbol","Name","Market Cap","IPO Year""AAPL","Apple Inc","$742.63B",1980"AMZN","A Inc"

5、;,"$173.33B",1997"MSFT","Microsoft Corporation","$346.9B",1986Table.2 Nasdaq 的 csv 原始数据 读入之后数据将会被分成数值和非数值部分: 1. % 用importdata直接读入CSV文件2. >> nasdaq = importdata('nasdaq.csv')3. nasdaq = % 结果存在struct中4. data: 3x1 double5. textdata: 4x4 cell6. >&

6、gt; nasdaq.data % csv中的数值部分7. ans =8. 19809. 199710. 1986 11. >> nasdaq.textdata % csv中的字符部分12. ans = 13. '"Symbol"' '"Name"' '"Market Cap"' '"IPO Year"'14. 'AAPL' 'Apple Inc' '$742.63B' ''

7、15. 'AMZN' 'A Inc' '$173.33B' '' 16. 'MSFT' 'Microsoft Corporation' '$346.9B' '' 显然这不是我们所期待的要导入格式。通过导入数据构造table对象沿用表Table.2中nasdaq.csv文件,我们可以使用readtable 函数,构造一个新的table对象,把csv文件中的数据导入到该对象中。readtable函数接受文件名称作为输入,返回一个table对象。 1. % 通过readta

8、ble函数来构造table对象2. >> nasdaq = readtable('nasdaq.csv')3. Warning: Variable names were modified to make them valid MATLAB identifiers. 4. nasdaq = 5. Symbol Name MarketCap IPOYear6. _ _ _ _7. 'AAPL' 'Apple Inc' '$742.63B' 1980 8. 'AMZN' 'A Inc' 

9、9;$173.33B' 1997 9. 'MSFT' 'Microsoft Corporation' '$346.9B' 1986 注意第2行的warning,因为readtable 函数把nasdaq.csv中的第一行自动变成了这个table的表头,在创建table对象的时候,MATLAB会对做表头的文字做处理,这里把Market Cap和IPO Year两个词中的空格去掉,缩成一个词,这样做是为了方便将来使用dot语法来访问表中的数据。因为MATLAB修改了原来的表头,所以这里给出了warning。调用table构造函数来构造tabl

10、e对象我们还可以通过直接调用table类的构造函数来创建table对象 (什么是类的构造函数见参加<>第2.5节,构造函数和类的名称相同)。在containers.Map 的介绍中,我们举了电话号码簿的例子,如表Table.3所示,它是我们这节要构造的table对象的原始数据 Table.3 电话号码簿 姓名电话号码Abby 5086470001 Bob 5086470002 Charlie 5086470003 下面程序中第1,2行用元胞数组来表示表中每一列的数据,第3行规定了表头的名称,第4行调用table的构造函数创建table对象,先输入数据,再输入表头的名称。表头通过ta

11、ble对象的VariableNames属性来设置。1. name='Abby''Bob''Charlie' % 3x1列向量2. number='5086470001''5086470002''5086470003' % 3x1列向量3. colName='Name','Number'4. phonetable=table(name,number,'VariableNames',colName) 命令行显示如下 1. % phonetable在命令行中

12、disp的结果 2. phonetable = 3. Name Number 4. _ _5.  6. 'Abby' '5086470001'7. 'Bob' '5086470002'8. 'Charlie' '5086470003'第4行把Name和Number做为table对象的VariableNames,可以这样理解VariableNames,我们可以把table看成由一个个列数据组成的数据结构,每列都是矢量,其中存放相同类型的数据。如果一个table有两列,它就有两个列矢量,每个列

13、矢量都是table的一个变量(Variable),给变量名字就是Variable Name。通过转换函数构造table对象除了使用table的构造函数来创建table对象,还可以使用转换函数把其它数据类型转成table,下列通过数组数据类型类构造table。下面的程序的1-2行,我们利用financial工具箱中的fetch函数,从Yahoo财经处得到雅虎从3月1日到3月10日的股票价格,fetch函数将返回一个数组,第3行我们利用array2table转换函数把得到数组转成table。 1. % 通过array2table创建table对象 2. conn = yahoo;3. array

14、= fetch(conn,'YHOO','3/1/2015','3/10/2015');4. yhoo = array2table(array,.5. 'VariableNames', 'date','open','high','low','closing','volumn','adjusted')第4行中,我们通过VariableName来指定表头的内容,结果显示如下 1. % yhoo的table在命令行的显示2.

15、yhoo = 3. date open high low closing volumn adjusted4. _ _ _ _ _ _ _5. 7.3603e+05 42.57 42.92 42.18 42.68 1.0601e+07 42.68 6. 7.3603e+05 43.6 43.93 42.67 42.98 1.1802e+07 42.98 7. 7.3603e+05 43.98 44.24 43.4 43.44 1.1888e+07 43.44 8. 7.3603e+05 44.18 44.31 43.5 44.16 1.1868e+07 44.16 9. 7.3603e+05 4

16、2.08 44.38 41.97 43.99 3.0099e+07 43.99 10. 7.3603e+05 43.7 43.95 42.42 42.62 2.2392e+07 42.62 11. 7.3603e+05 44.06 44.43 43.7 44.11 1.1027e+07 44.11 访问table中的数据通过表Table.1所建立的table对象,在命令行中显示如下: 1. % nasdaq table在命令行中的显示2. nasdaq = 3. Symbol Name MarketCap IPOYear4. _ _ _ _5.  6. 'AAPL'

17、'Apple Inc' '$742.63B' 1980 7. 'AMZN' 'A Inc' '$173.33B' 1997 8. 'MSFT' 'Microsoft Corporation' '$346.9B' 1986 我们可以通过使用dot+Variablename的语法直接访问table中的列,返回的结果是cell格式的数据: 1. % 使用dot语法访问table中的数据2. >> nasdaq.Symbol % dot格式+变量名的访问方式3.

18、ans = 4. 'AAPL'5. 'AMZN'6. 'MSFT'7. >> class(nasdaq) % 返回cell格式的数据8. ans =9. cell table类重载了subsref函数(什么是运算符的重载,参加MATLAB面向对象编程-从入门到设计模式12.1节),于是支持MATLAB传统的圆括号下标访问,如果要访问第一行,则:1. 使用下标语法访问table中的数据2. >> nasdaq(1,:)3. ans = 4. Symbol Name MarketCap IPOYear5. _ _ _ _6.  7. 'AAPL' 'Apple Inc' '$742.63B' 1980 使用圆括号,返回的结果仍然是table,如果要访问第2到3行,则: 1. % 使用下标语法访问table中的数据2. >> nasdaq(2:3,:)3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论