一步一步學(xué)Matlab(3)——Matlab中的數(shù)據(jù)類型

聲明:本系列文章參考了《MATLAB 8.X實戰(zhàn)指南(R2014a中文版)》(清華大學(xué)出版社,趙小川等編著),僅用于個人學(xué)習(xí)總結(jié)和交流,禁止作為商業(yè)用途轉(zhuǎn)載或使用。

小學(xué)時候我們就知道,數(shù)學(xué)中有自然數(shù)、整數(shù)、分?jǐn)?shù)、小數(shù)等等很多種類型的數(shù)。到了中學(xué),我們又發(fā)現(xiàn)了其實還有無理數(shù)、復(fù)數(shù)這些有些特殊的數(shù)。到了大學(xué)學(xué)了高等數(shù)學(xué)之后,我們又知道了其實還存在著無窮大、無窮小這樣“不可思議”的“數(shù)”。
為了對各種數(shù)據(jù)類型都能夠做到有效處理,Matlab中也規(guī)定了一系列不同的數(shù)據(jù)類型,下面對其進(jìn)行一一介紹。

數(shù)值類型

數(shù)值類型其實就對應(yīng)于數(shù)學(xué)中的各種類型的數(shù),包括下面幾種:

  • 整數(shù)
  • 浮點數(shù)(包括單精度和雙精度)
  • 復(fù)數(shù)
  • 無窮量
  • 非數(shù)值量

邏輯類型

現(xiàn)實世界中很多事情都是真假之間,比如真假美猴王,真錢假錢,真相與假象...Matlab世界也存在著這種用于判斷真假的數(shù)據(jù)類型,通常0表示假(0表示無,什么都沒有,四大皆空,當(dāng)然是假),而非0的數(shù)表示真。

在數(shù)學(xué)中,我們也經(jīng)常會遇到判斷真假的問題,比如判斷1>2這個式子是否成立。Matlab中提供了一系列的關(guān)系運算符:

關(guān)系運算符 含義
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
~= 不等于

下面將用一段Matlab代碼來展現(xiàn)這些關(guān)系運算符的用法:

?1>2  % 因為1不大于2,所以結(jié)果是假,輸出0

ans =

     0

?1<=2  % 因為1是小于等于2的,所以結(jié)果是真,輸出1

ans =

     1

?1~=2  % 因為1是不等于2的,所以結(jié)果是真,輸出1

ans =

     1

?1==2  % 因為1不等于2,所以結(jié)果是假,輸出0

ans =

     0

除了關(guān)系運算符以外,Matlab中還有3個邏輯運算符:與、或、非,是對運算數(shù)按二進(jìn)制位進(jìn)行運算的:

邏輯運算符 含義
& (按位)與,兩個數(shù)都為真結(jié)果才為真,否則結(jié)果為假
| (按位)或,兩個數(shù)至少有一個為真,結(jié)果才為真,否則結(jié)果為假
~ (按位)非,對單個數(shù)進(jìn)行操作,若該數(shù)為真,則結(jié)果為假,否則為真

代碼舉例如下:

?2&5  % 因為2和5都是非零的數(shù),所以都為真,它們的與運算結(jié)果也是真

ans =

     1

?2&0  % 因為2是非零的數(shù),表示真,而0表示假,所以它們的與運算結(jié)果是假

ans =

     0

?2 | 5  % 因為2和5都表示真,所以它們的或運算結(jié)果也為真

ans =

     1

?2 | 0  % 因為2表示真,0表示假,所以兩個數(shù)中有一個數(shù)是真,所以結(jié)果也是真

ans =

     1

?~0  % 因為0表示假,所以它的非運算的結(jié)果就相反,為真

ans =

     1

?~2  % 因為2表示真,所以它的非運算結(jié)果為假

ans =

     0

字符和字符串類型

還記得在我們的第一篇Hello World程序中用disp函數(shù)輸出Hello World嗎?里面的"Hello World"其實就是一個字符串,它其實是由多個單字符組成的字符數(shù)組,請看示例代碼:

?str = 'Hello World';  % 字符串要使用單引號括起來,不要使用雙引號
?disp(str)
Hello World
?size(str)  % 求字符串str的長度,返回的結(jié)果為:[1,11],表示str是一個1維、有11個元素的數(shù)組

ans =

     1    11

?str(1,5)  % 顯示str的第1行、第5個元素(注意:下標(biāo)是從1開始的)

ans =

o

?str(7)  % 顯示str的第7個元素

ans =

W

?abs(str)  % 求str每個元素的絕對值(顯示字母的ASCII碼,如果是中文,則將顯示字符的unicode編碼)

ans =

    72   101   108   108   111    32    87   111   114   108   100

?abs(str(1))  % 求str第一個元素的絕對值,返回72,這正是字母'H'的ASCII碼

ans =

    72

結(jié)構(gòu)體類型

結(jié)構(gòu)體類型是一種特殊的數(shù)據(jù)類型,相當(dāng)于其他面向?qū)ο笳Z言中的對象,也可以看成是C語言中的結(jié)構(gòu)體類型。

創(chuàng)建結(jié)構(gòu)體類型的方法十分簡單:結(jié)構(gòu)體名稱.字段名稱 = 字段值,并且支持嵌套。

下面給出一段示例程序,用于創(chuàng)建一個名為Person的結(jié)構(gòu)體,它有name、age、language(會說的語言,是一個單元數(shù)組,后面講)、score(成績,也是一個結(jié)構(gòu)體)四個屬性:

?Person.name = 'Tom';
?Person.age = 20;
?Person.language = {'Chinese','Spanish'};
?score.Math = 78;
?score.English = 98;
?Person.score = score;
?Person

Person = 

        name: 'Tom'
         age: 20
       score: [1x1 struct]
    language: {'Chinese'  'Spanish'}

?Person.score

ans = 

       Math: 78
    English: 98

數(shù)組與矩陣類型

數(shù)組是一堆元素的集合,這些元素可以是數(shù)值類型,也可以是字符串、結(jié)構(gòu)體等類型。同一個數(shù)組中的元素的數(shù)據(jù)類型必須都相同。數(shù)組的運算實際上是對數(shù)組中的每個元素同時進(jìn)行運算。

矩陣可以看成是多維數(shù)組,矩陣的運算遵循線性代數(shù)運算法則。矩陣將在后面的Blog中進(jìn)行詳細(xì)介紹。

創(chuàng)建數(shù)組有如下幾種方式:

  • 枚舉式
  • 等差數(shù)列式
  • 區(qū)間線性分割式

下面用實例代碼介紹一下創(chuàng)建數(shù)組的幾種方式:

?array = [1,2,3,4,5]  % 枚舉式,逐一列舉數(shù)組中的每個元素,元素之間用逗號隔開,也可以用空格隔開

array =

     1     2     3     4     5

?array2 = 1:5  % 等差數(shù)列式,以等差數(shù)組的形式創(chuàng)建數(shù)組,分別給出首、尾元素和步長(即等差數(shù)列的公差),步長為1時可以省略

array2 =

     1     2     3     4     5

?array3 = 1:2:6  % 等差數(shù)列式,這里步長為2,可以看出,結(jié)果并不一定會包含尾元素

array3 =

     1     3     5

?array4 = linspace(1,5,6)  % 區(qū)間線性分割式,調(diào)用linspace函數(shù),前兩個參數(shù)分別為被分割區(qū)間的下限和上限(閉區(qū)間),第三個參數(shù)為分割個數(shù)

array4 =

    1.0000    1.8000    2.6000    3.4000    4.2000    5.0000

單元數(shù)組類型

單元數(shù)組實際上是一種廣義的矩陣,與矩陣不同的是,單元數(shù)組可以容納不同數(shù)據(jù)類型的元素,通過大括號'{}'來界定數(shù)組元素。假如cell是一個單元數(shù)組,那么可以通過cell{i,j}的方式來獲取cell的元素。

實例代碼如下:

?cell1 = {'demo',1:2:10,5}

cell1 = 

    'demo'    [1x5 double]    [5]

?whos cell1
  Name        Size         Bytes  Class

  cell1       1x3            332  cell array

Grand total is 13 elements using 332 bytes

?cell{1,3}

ans =

     5

?cell2 = {'demo2','hello';5:-1:0,Inf}

cell2 = 

    'demo2'         'hello'
    [1x6 double]    [  Inf]

?whos cell2
  Name        Size         Bytes  Class

  cell2       2x2            444  cell array

Grand total is 21 elements using 444 bytes

?cell2{2,2}

ans =

   Inf

?a = cell(2,2)  % 調(diào)用cell函數(shù)來創(chuàng)建一個空的單元數(shù)組

a = 

     []     []
     []     []

?a{1,2} = 5

a = 

     []    [5]
     []     []
     
?whos a
  Name      Size         Bytes  Class

  a         2x2            112  cell array

Grand total is 5 elements using 112 bytes

這里要注意的一點是,對于字符串類型,其實是字符數(shù)組,那么怎么表示多個字符串組成的數(shù)組呢?如果用一般數(shù)組表示,會發(fā)現(xiàn)出了問題(所有字符串都連接到一起了):

?strs = ['aa','bcd','ef'];
?strs

strs =

aabcdef

那么這個時候就可以用單元數(shù)組來表示多個字符串的數(shù)組了,就不會存在這個問題:

?strs2 = {'aa','bcd','ef'};
?strs2

strs2 = 

    'aa'    'bcd'    'ef'

map容器類型

map是一種"鍵-值"對類型的數(shù)據(jù)類型,是Matlab R2012a版本新增的數(shù)據(jù)類型,所以下面的示例代碼是在正式版Matlab上運行的而非精簡版Matlab。可以通過containers.Map函數(shù)創(chuàng)建一個map對象,示例代碼如下:

>> data = containers.Map({'name','age','location'},{'Tom',20,'USA'});
>> data

data = 

  Map with properties:

        Count: 3
      KeyType: char
    ValueType: any

>> whos data
  Name      Size            Bytes  Class             Attributes

  data      3x1                 8  containers.Map              

>> data('name')

ans =

    'Tom'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Matlab中有15種基本數(shù)據(jù)類型,主要是整型、浮點、邏輯、字符、日期和時間、結(jié)構(gòu)數(shù)組、單元格數(shù)組以及函數(shù)句柄等。...
    李彪_哈工大閱讀 22,693評論 0 5
  • 顯示中文幫助的方法 預(yù)設(shè)→常規(guī)→幫助→在mathworks.com網(wǎng)站上(需要Internet連接)→語言(簡體中...
    VeyronC閱讀 2,516評論 0 34
  • 謹(jǐn)言慎行,能飛英語軟件
    素面梅花閱讀 137評論 0 0
  • 2017年8月30日 星期三 晴 回到家你正在津津有味地聽爸爸講故事,眼珠盯著故事書,聚精會神地聽,看你這么認(rèn)真,...
    愛蓮_8f0d閱讀 852評論 0 0
  • 元認(rèn)知能力,準(zhǔn)備分三大段來寫,第一部分是元認(rèn)知能力的概念,第二部分元認(rèn)知能力的好處,第三部分是如何鍛煉我們的元認(rèn)知...
    yoga麗閱讀 277評論 1 3