辽宁快乐12走势图基本走势:MATLAB table數據結構 首篇

辽宁快乐12预测一号码推荐号码 www.exedlj.com.cn 2019-3-2 01:32| 發布者: ilovematlab| 查看: 76125| 評論: 10|原作者: oopmatlab

摘要: MATLAB table是R2013b中引入的一個新的數據結構,雖然不像常用的基本數據類型為人熟悉,但是在編程中非常有用。它用來存放表狀類型的數據結構,并且支持常見的表和表之間的運算。 ... ... ... ... ... ... ...

文章PDF瀏覽下載鏈接

目錄:

MATLAB常用基本數據類型有:整型,浮點型,字符型,函數句柄,元胞數組和結構體數組。除了這些基本數據類型,MATLAB還有很多其它的數據類型不為人熟悉,這些數據類型在編程中也非常有用。MATLAB高級數據類型系列旨在向大家介紹它們:比如containers.Map, tables,enumerationtime series等等,它們為什么有用,用來解決什么問題,并且怎樣在科學工程計算中怎么使用。上篇我們提到了映射表結構(containers.Map )。本篇將介紹另一中新的MATLAB數據類型--table。

table簡介

為什么需要table數據結構

MathWorks在MATLAB R2013b中引入了一種新的數據結構叫做table 。table類似統計 工具箱中的dataset ,其引入的目的就是用來取代dataset的數據類型。因為表狀的數據在工程計算中越來越長久,有了table 類型,MATLAB用戶就可以不用購買統計工具箱,也能使用表狀的數據結構了。 table本質上來說是一種可以存放各種數據類型的容器,比如下面表Table.1中的數據,其中既有字符型,又有數值類型,其中第一行作為表頭:Symbol,Name,Market,Cap,IPO, Year是各列的名字。
Table.1 NASDAQ股票名稱表
Symbol Name Market Cap IPO Year
AAPL Apple Inc $742.63B 1980
AMZN Amazon.com, Inc $173.33B 1997
MSFT Microsoft Corporation $346.9B 1986
在conatiners.Map的章節中,我們介紹了MATLAB的基本數據類型(比如數組,原胞數組和結構體)在表達某些復雜數據類型時的局限性。這里不再一一贅述,讀者只需要認識到:數組的局限性在于不能用來存放數值以外的數據,而使用元胞讀取和索引內容時有種種不方便,比如無法區分該數據中的表頭和其余的行數據。事實上,如果數據存放在如下的CSV文件中,并且用importdata 直接讀取表Table.2中的CSV文件。
Table.2 Nasdaq 的 csv 原始數據
"Symbol","Name","Market Cap","IPO Year"
"AAPL","Apple Inc","$742.63B",1980
"AMZN","Amazon.com Inc","$173.33B",1997
"MSFT","Microsoft Corporation","$346.9B",1986
讀入之后數據將會被分成數值和非數值部分:
% 用importdata直接讀入CSV文件
>> nasdaq = importdata('nasdaq.csv')
nasdaq =                          % 結果存在struct中
        data: [3x1 double]
    textdata: {4x4 cell}
>> nasdaq.data                    % csv中的數值部分
ans =
        1980
        1997
        1986  
>> nasdaq.textdata                % csv中的字符部分
ans = 
    '"Symbol"'    '"Name"'                   '"Market Cap"'    '"IPO Year"'
    'AAPL'        'Apple Inc'                '$742.63B'        ''          
    'AMZN'        'Amazon.com Inc'           '$173.33B'        ''          
    'MSFT'        'Microsoft Corporation'    '$346.9B'         ''  
顯然這不是我們所期待的要導入格式。

通過導入數據構造table對象

沿用表Table.2中nasdaq.csv文件,我們可以使用readtable 函數,構造一個新的table對象,把csv文件中的數據導入到該對象中。readtable函數接受文件名稱作為輸入,返回一個table對象。
% 通過readtable函數來構造table對象
>> nasdaq = readtable('nasdaq.csv')
Warning: Variable names were modified to make them valid MATLAB identifiers. 
nasdaq =                                                                
    Symbol             Name              MarketCap     IPOYear
    ______    _______________________    __________    _______
    'AAPL'    'Apple Inc'                '$742.63B'    1980   
    'AMZN'    'Amazon.com Inc'           '$173.33B'    1997   
    'MSFT'    'Microsoft Corporation'    '$346.9B'     1986   
注意第2行的warning,因為readtable 函數把nasdaq.csv中的第一行自動變成了這個table的表頭,在創建table對象的時候,MATLAB會對做表頭的文字做處理,這里把Market Cap和IPO Year兩個詞中的空格去掉,縮成一個詞,這樣做是為了方便將來使用dot語法來訪問表中的數據。因為MATLAB修改了原來的表頭,所以這里給出了warning。

調用table構造函數來構造table對象

我們還可以通過直接調用table類的構造函數來創建table對象 (什么是類的構造函數見參加<>第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,計算物理博士,計算機碩士,《MATLAB面向對象編程-從入門到設計模式》作者,現就職一家科學工程計算公司的任架構組C++軟件工程師。業余興趣包括如何把軟件工程中的現代手段,應用到科學和工程計算當中去,來更好的解決復雜的問題。包括如何從整體上設計科學計算程序的結構;如何讓程序便于擴展和修改;在改進和開發算法的時候,如何保證程序已有的功能沒有收到影響;如何讓算法開發和測試系統的建立齊頭并進。

聲明:
本文內容所有內容僅代表個人觀點,如有任何問題,請聯系作者。
本版塊所有文章版權歸作者個人所有,未經允許,不得作為出版物出版。如需轉載,請聯系論壇管理員。

相關閱讀

發表評論

最新評論

引用 PSS?E 2019-7-24 18:27
新手學習,感謝分享
引用 lysfox 2019-7-23 13:56
不錯,學習一下
引用 Anacond_EkxKm 2019-5-10 19:07
學習了,謝謝
引用 michelangelo 2019-5-6 20:11
table和字符串之間的轉換?
引用 Drpcy 2019-5-3 17:06
引用 jk778 2019-4-28 17:54
看照約妹 line:v778 尋歡作樂 也不必上青樓 這裏高檔好康!
引用 Abigail_Qin 2019-4-21 22:31
感謝樓主~
引用 wx_jFyzKruc 2019-1-1 16:57
訪問抬頭呢
引用 老劉天馬行空 2018-10-14 15:47
學習了
引用 回首為伊人 2018-7-30 21:53
厲害
引用 freemanxu 2018-7-21 21:36
世界變化太快,yahoo這個函數以及沒有了~  @2018a
引用 freemanxu 2018-7-21 21:29
conn=yahoo; 運行出錯哦!
引用 cbxy001 2018-7-14 15:54
過來學習
引用 whyz308 2018-6-12 20:02
厲害
引用 淡然微笑066 2018-3-20 15:14
學習了
引用 ucaszzy 2018-3-13 10:22
學習一下
引用 xhbao 2018-2-3 06:02
樓主有個問題,table數據可以在任意行或任意列插入嗎?
引用 a472036783 2018-1-23 10:41
人和人的差距真的大
引用 我可是小帥比 2018-1-2 15:03
圍觀一下
引用 toho 2017-7-18 16:03
怎么我點收藏不好使啊。。

查看全部評論(10)

MATLAB table數據結構 首篇

MATLAB table是R2013b中引入的一個新的數據結構,雖然不像常用的基本數據類型為人熟悉,但是在編程中非常有用。它用來存放表狀類型的數據結構,并且支持常見的表和表之間的運算。 ... ... ... ... ... ... ...

MATLAB映射表數據結構

除了常用的基本數據類型,MATLAB還有很多其它實用的數據類型不為人熟悉,例如映射表containers.Map,常用的MATLAB高級數據類型。它最大的特點使用方便的索引方式進行快速的查找。本篇介紹為什么需要這種數據結構,以 ...

MATLAB table數據結構 再篇

MATLAB table是R2013b中引入的一個新的數據結構,雖然不像常用的基本數據類型為人熟悉,但是在編程中非常有用。它用來存放表狀類型的數據結構,并且支持常見的表和表之間的運算。 ... ... ... ... ... ... ...

對函數的輸入進行檢查和解析

在工程計算中,如果函數的輸入有錯誤,我們總是希望能盡早捕捉到這些錯誤,并及時終止程序。在MATLAB 中,可以使用validateattributes,validatestring和inputParser 類來對輸入進行檢查。它們提供全面的檢查功能和清 ...

MATLAB單元測試

本篇是把現代軟件工程思想應用到MATLAB工程開發中的精髓,希望高級MATLAB用戶仔細研讀。作者用實際的例子解釋在開發和逐漸改進算法的時候,如何保證程序已有的功能沒有收到影響,步步為營,讓算法開發和測試系統的建 ...

MATLAB映射表數據結構

除了常用的基本數據類型,MATLAB還有很多其它實用的數據類型不為人熟悉,例如映射表containers.Map,常用的MATLAB高級數據類型。它最大的特點使用方便的索引方式進行快速的查找。本篇介紹為什么需要這種數據結構,以 ...

對函數的輸入進行檢查和解析

在工程計算中,如果函數的輸入有錯誤,我們總是希望能盡早捕捉到這些錯誤,并及時終止程序。在MATLAB 中,可以使用validateattributes,validatestring和inputParser 類來對輸入進行檢查。它們提供全面的檢查功能和清 ...

MATLAB性能測試框架

MATLAB Performance Test 框架是Mathworks 在MATLAB R2016a 中推出的?個新的框架,該框架?來獲得代碼性能在統計意義上的數據,還可以?來?較算法的性能,并且給出詳細完整的報告。 ... ... ... ... ... ... ... ...
關閉

站長推薦上一條 /4 下一條

返回頂部