logical 配列を 1 つの値にする
この例では、関数 any
または all
を使用して、配列全体を 1 つの論理値に低次元化します。
関数 any
および all
は、それぞれ論理演算子 |
(OR) および &
(AND) の自然な拡張です。しかし、関数 any
および all
は 2 つの要素だけでなく、配列の特定の次元にあるすべての要素を比較します。関数 any
または all
は、それらすべての要素が演算子 &
または |
で接続されている場合と同様に、長い論理式の結果を評価します。したがって、コア論理演算子とは異なり、関数 any
および all
はサイズが 1 になるように動作する配列次元のサイズを小さくします。これにより、多くの論理値を 1 つの論理条件に縮小することができます。
まず、1 ~ 25 のランダムな整数を含む行列 A
を作成します。再現性を得るため、乱数発生器を既定の状態にリセットします。
rng default
A = randi(25,5)
A = 5×5
21 3 4 4 17
23 7 25 11 1
4 14 24 23 22
23 24 13 20 24
16 25 21 24 17
次に、関数 mod
および NOT の論理演算子 ~
を使用し、A
の偶数の要素を判定します。
A = ~mod(A,2)
A = 5x5 logical array
0 0 1 1 0
0 0 0 0 0
1 1 1 0 1
0 1 0 1 1
1 0 0 1 0
要素が偶数の場合は logical 1
(true
)、要素が奇数の場合は logical 0
(false
) をもつ行列になります。
関数 any
および all
は、サイズ 1 で動作するように次元を減らすため、通常、2 次元行列を 1 つの論理条件に縮小する関数の 1 つを any(any(A))
のように 2 回適用します。ただし、A(:)
表記を使用して A
のすべての要素を 1 つの列ベクトルとみなす場合は、any(A(:))
を使用して関数の呼び出しを入れ子にすることなく、同じ論理情報を得ることができます。
A
に偶数の要素があるか判定します。
any(A(:))
ans = logical
1
any
または all
への関数呼び出しで論理比較および関係比較を実行できます。これにより、簡単に素早く、配列の様々な特性をテストできます。
A
の要素がすべて奇数であるか判定します。
all(~A(:))
ans = logical
0
A
のメインまたは上対角要素に偶数があるか判定します。diag(A)
および diag(A,1)
で返されるベクトルが同じサイズではないため、最初にそれぞれの対角を 1 つのスカラー論理条件に縮小してから、それらを比較する必要があります。比較にはショートサーキット OR 演算子 ||
が使用できます。これは、最初の対角の任意の要素が偶数であれば、演算子の右側に表示される内容にかかわらず、式全体が true に評価されるからです。
any(diag(A)) || any(diag(A,1))
ans = logical
1
参考
any
| all
| and
| or
| xor
| Short-Circuit
AND
| Short-Circuit
OR