Main Content

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

参考

| | | | | |