源自於http://bime-matlab.blogspot.com/2006/10/32.html
邏輯操作元主要在連繫兩個邏輯值,應用上分為元素間、位元間等兩類。
其相關操作元如下表。
操作元 | 範例 | 說明 |
---|---|---|
& | C=A&B | AB兩元素均為1時為1,否則為0 |
| | C=A|B | 任一A或B為1為正,否則為0 |
~ | C=~A | 非A,即A為0時為1,否則為0 |
xor | C=xor(A,B) | 僅其中一個為非零時為1,否則為0 |
A=[1 0 1 1 0 0 1], B=[0 0 1 0 1 0 1]
A = 1 0 1 1 0 0 1
B = 0 0 1 0 1 0 1
>> C=A & B
C = 1×7 logical array
0 0 1 0 0 0 1
>> C=xor(A,B)
C = 1×7 logical array
1 0 0 1 1 0 0
利用矩陣本身,進行分類的方式到處可用。這些指令函數亦常使用,
其型式如下表:
操作元 | 範例 | 說明 |
---|---|---|
any | C=any(A,dim) | A矩陣中之任何行向元素不為0時為1,否則為0。dim=2時為列向。 |
all | C=all(A) | 矩陣中之任何行向元素均為1時為1,否則為0。dim=2時為列向。 |
isprime | C=isprime(A) | A矩陣中,元素為質數時為1時為1,否則為0 |
isequal | C= isequal(A) | 僅其中一個為非零時為1,否則為0 |
isempty | C= isempty(A) | 若為空矩陣為1,否則為0 |
isinteger | C= isinteger(A) | 若為整數為1,否則為0 |
isnumeric | C= isnumeric(A) | 若為數值為1,否則為0 |
isreal | C= isreal(A) | 若為實數為1,否則為0 |
isfinite | C= isfinite(A) | 若為定值為1,否則為0 |
logical | C= islogical(A) | 將矩陣A轉為邏輯值,非零為1 |
islogical | C= islogical(A) | 若為邏輯值為1,否則為0 |
ischar | C= ischar(A) | 若為文字值為1,否則為0 |
iscell | C= iscell(A) | 若為細胞陣列為1,否則為0 |
find | C=find(A);C=find(A>B) | 找尋矩陣A中不為零之序號,存於C找尋矩陣A大於B之序號存於C |
>> A=magic(3)
B=A;
B(~isprime(A))=0
A =
8 1 6
3 5 7
4 9 2
B =
0 0 0
3 5 7
0 0 2
這些利用is*之型式逗起來的函數也是屬於矩陣邏輯操作函數,比較常用的有isempty、isequal等等。有興趣的讀者可以參考其輔助檔。
logical則是一個將矩陣轉換為邏輯常數函數,只要零值換為邏輯0值,非零(包括負值)均視為邏輯1。例如:
logical則是一個將矩陣轉換為邏輯常數函數,只要零值換為邏輯0值,非零(包括負值)均視為邏輯1。例如:
>> A=-5:5
A =
-5 -4 -3 -2 -1 0 1 2 3 4 5
>> islogical(A)
ans =
0
顯然矩陣A並非邏輯矩陣,但經過如下轉換,即可轉為邏輯矩陣:
>> logical(A)
Warning: Values other than 0 or 1 converted to logical 1.
ans =
1 1 1 1 1 0 1 1 1 1 1
此外,any與 all兩函數則是檢驗一個矩陣是否有非零元素或全為非零元素。兩者均可針對單行或單列檢驗,如:
顯然它是行向作業,如改為列向則後面加一參數dim=2
注意上述之關係等號必須使用兩個"="號。讀者可自行印證這兩個的結果。
>>any(A==B)
ans =
1 1 1
顯然它是行向作業,如改為列向則後面加一參數dim=2
>>any(A==B,2)
ans =
0
1
1
注意上述之關係等號必須使用兩個"="號。讀者可自行印證這兩個的結果。
在行向上,A與B是沒有完全相等之元素,所以下面用all指令的結果應均為零。
但由於第二列均為[3 5 7],故下面的結果第二項應為1,其餘均為0。
有關關係操作元之運用在未來程式寫作上甚為重要。
>>all(A==B)
ans =
0 0 0
但由於第二列均為[3 5 7],故下面的結果第二項應為1,其餘均為0。
>>all(A==B, 2)
ans =
0
1
0
有關關係操作元之運用在未來程式寫作上甚為重要。
簡潔的關係式可以使程式看起來更為流暢,其運作的時間也會降低。
最後find之函數則是尋找某矩陣不為零之元素或具某條件之原始序號,
如:
由結果可知,第五項與第八項為零。此外:
其結果是:只有第一、二、四、七項元素大於五。若為矩陣間比較,其大小應相同。
A=fix(rand(3)*10)
A =
9 8 8
9 0 0
4 3 1
>>find(A)'
ans =
1 2 3 4 6 7 9
由結果可知,第五項與第八項為零。此外:
>>find(A>5)'
ans =
1 2 4 7
其結果是:只有第一、二、四、七項元素大於五。若為矩陣間比較,其大小應相同。
沒有留言:
張貼留言