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

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

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

數(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ù)按二進制位進行運算的:

邏輯運算符 含義
& (按位)與拭荤,兩個數(shù)都為真結(jié)果才為真茵臭,否則結(jié)果為假
| (按位)或,兩個數(shù)至少有一個為真舅世,結(jié)果才為真旦委,否則結(jié)果為假
~ (按位)非,對單個數(shù)進行操作雏亚,若該數(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ù)組中的每個元素同時進行運算。

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

創(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)系作者
  • 序言:七十年代末恬吕,一起剝皮案震驚了整個濱河市签则,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铐料,老刑警劉巖渐裂,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钠惩,居然都是意外死亡柒凉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門篓跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膝捞,“玉大人,你說我怎么就攤上這事愧沟∈咭В” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵沐寺,是天一觀的道長计盒。 經(jīng)常有香客問我,道長芽丹,這世上最難降的妖魔是什么北启? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮拔第,結(jié)果婚禮上咕村,老公的妹妹穿的比我還像新娘。我一直安慰自己蚊俺,他們只是感情好懈涛,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泳猬,像睡著了一般批钠。 火紅的嫁衣襯著肌膚如雪宇植。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天埋心,我揣著相機與錄音指郁,去河邊找鬼。 笑死拷呆,一個胖子當(dāng)著我的面吹牛闲坎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茬斧,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼腰懂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了项秉?” 一聲冷哼從身側(cè)響起绣溜,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娄蔼,沒想到半個月后怖喻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡贷屎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年罢防,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唉侄。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡咒吐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出属划,到底是詐尸還是另有隱情恬叹,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布同眯,位于F島的核電站绽昼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏须蜗。R本人自食惡果不足惜硅确,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望明肮。 院中可真熱鬧菱农,春花似錦、人聲如沸柿估。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秫舌。三九已至的妖,卻和暖如春绣檬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫂粟。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工娇未, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赋元。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓忘蟹,卻偏偏與公主長得像飒房,于是被迫代替她去往敵國和親搁凸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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

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