Matlab の配列で値のインデックスを見つける

Ammar Ali 2022年1月23日
Matlab の配列で値のインデックスを見つける

このチュートリアルでは、MATLAB の find() 関数を使用して配列内の値のインデックスを見つける方法について説明します。

MATLAB で find() 関数を使用して配列内の値のインデックスを検索する

配列では、要素は 1 から始まる特定のインデックスに配置されます。特定の配列内の値のインデックスを見つけるには、find() 関数を使用できます。find() 関数は、配列または行列内の要素のインデックスと値を検索するために使用されます。要素のインデックスを見つけるには、find() 関数内で条件を定義する必要があります。たとえば、単一の要素のインデックスを検索する場合は、find() 関数内で equal 演算子を使用できます。同じ要素が異なるインデックスに存在する場合、find() 関数は要素が存在するすべてのインデックスを返します。この関数内では、あらゆる種類の条件ステートメントを使用できます。たとえば、特定の数より大きいすべての要素のインデックスを検索するとします。その場合、大なり記号演算子を使用でき、その特定の数より大きいすべての要素のインデックスが返されます。たとえば、特定の配列内に存在する単一の要素のインデックスを見つけましょう。以下のコードを参照してください。

mat = [2 3 1 2];
indices = find(mat==2)

出力:

indices =

     1     4

変数インデックスには、上記の出力に 2つの値が含まれています。これは、要素が配列またはベクトル内のインデックス 1 と 4 に存在することを意味します。ここで、1 より大きい要素のインデックスを検索したいとします。find() 関数内の条件を変更する必要があります。等号演算子を使用する代わりに、大なり記号を使用します。以下のコードを参照してください。

mat = [2 3 1 2];
indices = find(mat>1)

出力:

indices =

     1     2     4

上記の出力では、変数インデックスには 3つの値が含まれており、ご覧のとおり、3つの要素は指定された配列またはベクトル内で 1 より大きいです。行列があり、ベクトル内の要素の位置を見つけたい場合は、find() 関数を使用できます。行列内の要素が特定の行と列に配置されていることがわかっているので、その特定の行と列を見つけるには、find() 関数を使用できます。要素が複数の位置に存在する場合、find()関数は行と列に複数の値を返します。以下のコードを参照してください。

mat = [2 3 ; 2 1]
[row, col] = find(mat==2)

出力:

mat =

     2     3
     2     1


row =

     1
     2


col =

     1
     1

上記の出力では、行列には​​2つの行と 2つの列があり、行と列のベクトルの最初の値は要素の最初の位置、つまり 1 番目の行と 1 番目の列であり、行と列の 2 番目の値は 2 行 1 列目の要素の 2 番目の位置。指定された行列で要素 2 のインデックスを検索する場合、行列の場合は値が列方向に配置されるため、find() 関数は 1 と 2 を返します。つまり、値 2 はインデックス 1 と 2 にあり、値 3 はインデックス 3 にあり、値 1 はインデックス 4 にあります。したがって、2つの出力変数の代わりに、1つの変数のみを渡すと、find() 関数は戻ります。列ごとのインデックス。たとえば、要素のインデックスを見つけて、それらを別の値に置き換えましょう。以下のコードを参照してください。

mat = [2 3 ; 2 1]
indices = find(mat==2)
mat(indices) = 5

出力:

mat =

     2     3
     2     1


indices =

     1
     2


mat =

     5     3
     5     1

上記のコードでは、最初に要素 2 のインデックスを見つけ、次にインデックスを使用して値を 5 に置き換えます。ご覧のとおり、マトリックス値が変更されています。何らかの理由で find() 関数を使用したくない場合は、いつでも for ループと if ステートメントを使用して関数を作成できます。配列または行列のすべての要素をトラバースする必要があり、if ステートメントを使用して、現在の値が目的の値と一致するかどうかを確認できます。目的の値と一致する場合は、インデックスを保存して、配列内に存在するすべての要素を確認するまで先に進むことができます。たとえば、for ループと if ステートメントを使用して、ベクトルまたは配列のインデックスを検索してみましょう。以下のコードを参照してください。

mat = [2 3 2 1]
indices = [];
for i=1:length(mat)
    if(mat(i) == 2)
        indices = [indices i];
    end
end
indices

出力:

mat =

     2     3     2     1


indices =

     1     3

上記のコードでは、変数インデックスを空のベクトルで初期化しました。値 2 が配列内の任意の要素と一致する場合、そのインデックスを indices 変数に保存します。

著者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

関連記事 - MATLAB Array