【MATLAB】配列の内容を比較する

一部のプログラム言語にも存在する機能ですが、MATLABにも配列の比較を行う関数が準備されています。

ループ分を使用せずに配列の要素を比較することができるため、スクリプトの高速化にも直結します。是非覚えておきたい内容です。

スポンサーリンク

事前準備

比較する配列として以下の2つのセル配列array1とarray2を準備します。

array1 = {'a' 'b' 'c' 'e' 'abc' 'geh'}
array2 = {'a' 'b' 'd' 'def' 'geh'}

文字”c”,”e”と文字列”abc”はarray1のみに存在し、文字”d”と文字列”def”はarray2のみに存在します。

また、文字”a”,”b”と文字列”geh”はどちらのセル配列にも存在します。

この2つのセル配列について、色々と比較してみたいと思います。

今回はセル配列の比較を行いますが、通常の配列でも同じように行えます。ただしセル配列と通常の配列の比較はできないのでどちらかに合わせてください。

2つの配列が等価かどうかを判定する

2つの配列の内容が全く同じかを確認する場合はisequal関数を使用します。

isequal(array1, array2)

array1とarray2は格納されている値が異なるのでfalseが返ってきます。

もちろん以下のように全く同じ値が入っている場合はtrueとなります。

両方の配列に存在する値を抽出

2つの配列のどちらかに入っている値を全てピックアップしたい場合はunion関数を使用します。

union(array1, array2)

実行すると、どちらかの配列に含まれている値のリストが配列(セル配列)として返ってきます。

どちらかの配列に存在する値を抽出

2つの配列どちらにも入っている値をピックアップしたい場合はunion関数を使用します。

intersect(array1, array2)

実行すると、両方の配列に含まれている値のリストが配列(セル配列)として返ってきます。

片方の配列に存在して片方の配列には存在しない値を抽出

配列Aに存在して配列Bには存在しない値をピックアップするにはsetdiff関数を使用します。

setdiff(array1, array2)

実行すると、前者の配列(array1)には存在して後者の配列(array2)には存在しない値のリストが配列(セル配列)として返ってきます。

片方の配列に存在して片方の配列には存在しない値を全て抽出

いずれかの配列にしか存在しない値を全てピックアップするにはsetxor関数を使用します。

setxor(array1, array2)

実行すると、いずれかの配列にのみ存在する値のリストが配列(セル配列)として返ってきます。

setdiff関数ではarray1に存在してarray2に存在しない値のみ返ってきましたが、setxor関数ではarray2に存在してarray1に存在しない値も一緒に返ってきます。

並び替えを行いたくない場合

union、intersect、setdiff、setxorいずれの昇順でソートされて戻ってきますが、ソートしたくない場合は実行時のオプションとして”stable”を指定します。

union(array1, array2, 'stable')

“stable”を指定すると、元の配列の順番を保持しつつ前者の配列→後者の配列の順に該当する値がリストアップされます。

コメント

タイトルとURLをコピーしました