ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

論理配列を 1 つの値にする

1 つの論理値 true または false のみが必要な場合でも、計算の結果、数値または論理配列全体が生成されることがあります。この場合、関数 any または all を使用して、計算を続行するために配列を 1 つのスカラー論理値に減らします。

関数 any および all は、それぞれ論理演算子 | (OR) および & (AND) の自然な拡張です。しかし、関数 any および all は 2 つの要素だけでなく、配列の特定の次元にあるすべての要素を比較します。関数 any または all は、それらすべての要素が演算子 & または | で接続されている場合と同様に、長い論理式の結果を評価します。したがって、コア論理演算子とは異なり、関数 any および all はサイズが 1 になるように動作する配列次元のサイズを小さくします。これにより、多くの論理値を 1 つの論理条件に縮小することができます。

まず、1 ~ 25 のランダムな整数を含む行列 A を作成します。

rng(0)
A = randi(25,5)
A =

    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 =

     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

要素が偶数の場合は論理値 1 (true)、要素が奇数の場合は論理値 0 (false) をもつ行列になります。

関数 any および all は、サイズ 1 で動作するように次元を減らすため、通常、2 次元行列を 1 つの論理条件に縮小する関数の 1 つを any(any(A)) のように 2 回適用します。ただし、A(:) 表記を使用して A のすべての要素を 1 つの列ベクトルとみなす場合は、any(A(:)) を使用して関数の呼び出しを入れ子にすることなく、同じ論理情報を得ることができます。

A に偶数の要素があるか判定します。

any(A(:))
ans =

     1

結果は論理値 1 (true) です。

any または all への関数呼び出しで論理比較および関係比較を実行できます。これにより、簡単に素早く、配列の様々な特性をテストできます。

A の要素がすべて奇数であるか判定します。

all(~A(:))
ans =

     0

結果は論理値 0 (false) です。

A のメインまたは上対角要素に偶数があるか判定します。

any(diag(A) | diag(A,1))
Error using  | 
Inputs must have the same size.

diag(A) および diag(A,1) から返されたベクトルのサイズが異なるため、MATLAB® はエラーを返します。

それぞれの対角を 1 つのスカラー論理条件に縮小し、論理ショートサーキットにするには、関数 any をショートサーキット OR 演算子 || の両側で使用します。

any(diag(A)) || any(diag(A,1))
ans =

     1

結果は論理値 1 (true) です。diag(A)diag(A,1) のサイズが異なっていてもかまいません。

参考

| | | | |

この情報は役に立ちましたか?