MATLAB之邏輯


概述

上一節(jié)的內(nèi)容中,我們介紹了索引的使用方法冰蘑。索引的目的是為了取出矩陣中的一部分元素祠肥,因此我們知道通過元素在矩陣中的位置我們可以實現(xiàn)索引。在本節(jié)中剂桥,我們將介紹MATLAB中的邏輯變量以及通過邏輯變量索引的方法权逗。

MATLAB中存在一種logical(邏輯)類型用于表示邏輯上的真和假。在其他程序語言中奔垦,這樣的一種類型也叫做bool型變量。這一種變量本身只有兩種值犯眠,分別為true和false筐咧。規(guī)定false對應(yīng)數(shù)值0,true對應(yīng)其他值(特別地残炮,使用時可以用任意非零值代表true泉瞻,但存儲時會自動轉(zhuǎn)為1代表true袖牙,這樣的好處是只需要占用一個比特的空間)。

邏輯變量

logical變量只存在兩種值true(真)或者false(假)碉怔,規(guī)定分別用數(shù)字1和0存儲桨踪。以邏輯值組成的矩陣稱為邏輯矩陣锻离。一般有以下幾種創(chuàng)建邏輯矩陣的方法卫键,各有用處莉炉。

方法一:直接賦值法

直接用true,false直接賦值到一個矩陣绍昂,缺點操作復(fù)雜,一般不考慮這種方法忍饰。

x = [true false] % 正確實例
A = [1 0] % 錯誤實例
whos

輸出值

x =
     1     0
A =
     1     0
% 盡管兩個語句的輸出一樣
% 但是通過whos命令可以看到變量的類型不一樣
% 可以看到只有用true撩荣,false直接賦值才能創(chuàng)建邏輯矩陣
% 一般不考慮這種方法
  Name      Size            Bytes  Class      Attributes

  A         1x2                16  double               
  x         1x2                 2  logical 

方法二:logical函數(shù)法

logical函數(shù)是將數(shù)值或矩陣轉(zhuǎn)換為邏輯值的函數(shù)。遵循的轉(zhuǎn)換規(guī)則為:非零值為邏輯1饶深,零值為邏輯0餐曹。這種方法將一個矩陣非零值對應(yīng)轉(zhuǎn)為邏輯矩陣中的1〉欣澹可以用作非零值的邏輯索引台猴。

函數(shù)法

% logical
A = [1 0 3;0 5 6];
x1 = logical(1)
whos
% 對于傳入的數(shù)值或矩陣
% 非零值為邏輯1俱两,零值為邏輯0
x2 = logical(0)
x3 = logical(2)
x4 = logical(A)
% 生成的邏輯矩陣作為索引饱狂,可以取出矩陣中對應(yīng)位置為true的元素
x5 = A(logical(A))

命令行輸出

% logical
x1 =
     1
% 觀察兩個變量的類型(Class)和比特數(shù)(Bytes)
% A屬于double類型(占用48比特)
% x1屬于logical類型(占用1比特)
  Name      Size            Bytes  Class      Attributes
  A         2x3                48  double               
  x1        1x1                 1  logical              
x2 =
     0
x3 =
     1
x4 =
     1     0     1
     0     1     1  
% 形如A(logical(A))可以取出A中的非零元素
x5 =
     1
     5
     3
     6

方法三:借用邏輯表達式(命題)

命題就是判斷一個事件的陳述句。對于數(shù)值來說一個判斷的陳述句通過關(guān)系運算符連接宪彩。
MATLAB的關(guān)系運算符共6個:等于(==)休讳,不等于(~=),大于等于(>=)尿孔,大于(>)俊柔,小于等于(<=),小于(<)活合。
這種方法創(chuàng)建邏輯矩陣最為常見雏婶,能夠很高效地創(chuàng)建對應(yīng)的邏輯矩陣,同時進行邏輯運算并作為索引

邏輯表達式

% 邏輯表達式
A = [1 0 3;0 5 6];
x1 = (3 == 2)
x2 = (3 ~= 2) 
x3 = (3 >= 2)
x4 = (3 >  2)
x5 = (3 <= 2)
x6 = (3 <  2)
% 特別地白指,對矩陣使用關(guān)系運算符返回一個相應(yīng)的邏輯矩陣
x7 = (A < 4)
% 返回的矩陣是邏輯矩陣留晚,又可以作為索引,取出矩陣中滿足判斷條件的元素
x8 = A(A < 4)

命令行輸出

% 邏輯表達式
% 對于僅由數(shù)值構(gòu)成的邏輯表達式告嘲,返回該表達式的真假性
x1 =
     0
x2 =
     1
x3 =
     1
x4 =
     1
x5 =
     0
x6 =
     0
% 對于由矩陣構(gòu)成的邏輯表達式错维,返回和該矩陣等大小的邏輯矩陣
% 邏輯矩陣的值是矩陣相應(yīng)位置元素的判斷情況
x7 =
     1     1     1
     1     0     0
% 第一行全行,第二行1個元素大于4橄唬,滿足判斷記為1需五,其他值記為0
% 這里的A(A < 4)就對應(yīng)取出A中小于4的元素
x8 =
     1
     0
     0
     3

邏輯表達式的運算

對于邏輯值之間的運算,可以實現(xiàn)邏輯表達式的復(fù)合運算轧坎,這時可以實現(xiàn)聯(lián)合條件的邏輯索引宏邮。有四種運算:邏輯與(&,&&)缸血,邏輯或(|蜜氨,||),邏輯異或(xor函數(shù))和邏輯非(~)捎泻。這四種邏輯運算服從以下的真值表飒炎。

邏輯真值表

A B A&B A|B xor(A,B) ~A
0 0 0 0 0 1
0 1 0 1 1 1
1 0 0 1 1 0
1 1 1 1 0 0

應(yīng)用實例

A = [1 0 3;0 5 6];
x1 = A((A < 4)&(A > 2))
x2 = A((A < 4)|(A > 2))
x3 = A(xor((A < 4),(A > 2)))
x4 = A(~(A < 4))
% &&和||是&和|的變體
% 只能用于標(biāo)量,不能用于矩陣笆豁,但速度更快
x5 = (3 > 4)&&(3 > 2)
x6 = (3 > 2)||(3 > 4)

命令行輸出

% & 與
x1 =
     3
% | 或
x2 =
     1
     0
     0
     5
     3
     6
% xor函數(shù) 異或
x3 =
     1
     0
     0
     5
     6
% ~ 取非郎汪,取反
x4 =
     5
     6
% && 適用于標(biāo)量的與(利用邏輯與的特性加速運算)
% (如果第一個值為0赤赊,立即判斷該值為0)
x5 =
     0
% || 適用于標(biāo)量的或(利用邏輯或的特性加速運算)
% (如果第一個值為1,立即判斷該值為1)
x6 =
     1

find函數(shù)——邏輯索引的輔助工具

find函數(shù)是將邏輯矩陣索引直接轉(zhuǎn)換為直接索引(下標(biāo)位置)的函數(shù)煞赢。我們有時候作出了判斷抛计,但是卻需要直接索引的信息,這時可以利用find函數(shù)進行轉(zhuǎn)換照筑;另一個用處是吹截,找到前n個滿足條件的索引

% find函數(shù)
A = [2 5 4 0 0 6];
x1 = A > 2
x2 = find(A > 2)
B = [2 5 4;0 0 6];
% 按列產(chǎn)生線性地址索引
x3 = find(B > 2)
x4 = B(find(B > 2))
% 滿足條件的前兩個值的索引
x5 = find(B > 2,2)

命令行輸出

% find函數(shù)
% 邏輯索引
x1 =
     0     1     1     0     0     1
% 線性地址索引
x2 =
     2     3     6
% 根據(jù)這個輸出,可以發(fā)現(xiàn)凝危,按列產(chǎn)生線性地址索引
x3 =
     3
     5
     6
% 因為是線性地址索引波俄,B(find(B > 2))依然有效,結(jié)果與B(B > 2)一樣
x4 =
     5
     4
     6
% 滿足條件的前兩個值的索引
x5 =
     3
     5

重在應(yīng)用

以下是邏輯數(shù)組的三種基本應(yīng)用蛾默,根據(jù)判斷條件進行懦铺,邏輯索引查找,替換和刪除支鸡。

1.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3]阀趴,依次找出其中在區(qū)間[2,6]中的數(shù)。

% 查找
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];

2.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3]苍匆,依次將其中在區(qū)間[2,6]中的數(shù)替換為10。

% 替換
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];

3.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3]棚菊,刪除其中在區(qū)間[2,6]中的數(shù)浸踩。

% 刪除(要求在矩陣A中改變值)
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];

參考思路

1.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3],依次找出其中在區(qū)間[2,6]中的數(shù)统求。

% 查找
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];
B = A((A>=2)&(A<=6))

2.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3]检碗,依次將其中在區(qū)間[2,6]中的數(shù)替換為10。

% 替換
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];
A((A>=2)&(A<=6)) = 10

3.一組數(shù)據(jù)[1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3]码邻,刪除其中在區(qū)間[2,6]中的數(shù)折剃。

% 刪除
A = [1 2 4 6 7 8 9 0 4 5 3 2 4 2 2 3 4 2 3];
A=A(~( (A>=2) & (A<=6) ))

小結(jié)

本節(jié)內(nèi)容不多,但是邏輯索引比起線性地址的等間距索引索引的產(chǎn)生要更加普遍像屋,所以怕犁,希望讀者熟練掌握這三種基本應(yīng)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末己莺,一起剝皮案震驚了整個濱河市奏甫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凌受,老刑警劉巖阵子,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胜蛉,居然都是意外死亡挠进,警方通過查閱死者的電腦和手機色乾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领突,“玉大人暖璧,你說我怎么就攤上這事∪列耄” “怎么了漆撞?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長于宙。 經(jīng)常有香客問我浮驳,道長,這世上最難降的妖魔是什么捞魁? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任至会,我火速辦了婚禮,結(jié)果婚禮上谱俭,老公的妹妹穿的比我還像新娘奉件。我一直安慰自己,他們只是感情好昆著,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布县貌。 她就那樣靜靜地躺著,像睡著了一般凑懂。 火紅的嫁衣襯著肌膚如雪煤痕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天接谨,我揣著相機與錄音摆碉,去河邊找鬼。 笑死脓豪,一個胖子當(dāng)著我的面吹牛巷帝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扫夜,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼楞泼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笤闯?” 一聲冷哼從身側(cè)響起现拒,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎望侈,沒想到半個月后印蔬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡脱衙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年侥猬,在試婚紗的時候發(fā)現(xiàn)自己被綠了例驹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡退唠,死狀恐怖鹃锈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞧预,我是刑警寧澤屎债,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站垢油,受9級特大地震影響盆驹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滩愁,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一躯喇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硝枉,春花似錦廉丽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至责球,卻和暖如春焦履,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棕诵。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凿将,地道東北人校套。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像牧抵,于是被迫代替她去往敵國和親笛匙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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