Main Content

find

非ゼロ要素のインデックスと値を見つける

説明

k = find(X) は、配列 X 内にある個々の非ゼロ要素の線形インデックスを含むベクトルを返します。

  • X がベクトルの場合、findX と同じ方向のベクトルを返します。

  • X が多次元配列の場合、find は結果の線形インデックスからなる列ベクトルを返します。

k = find(X,n) は、X 内の非ゼロ要素に対応するインデックスを最初から数えて n 個返します。

k = find(X,n,direction) は、direction'last' の場合、X 内の非ゼロ要素に対応するインデックスを最後から数えて n 個検出します。direction の既定値は 'first' であり、非ゼロ要素に対応するインデックスを最初から数えて n 個検出します。

[row,col] = find(___) は前述の構文に示した任意の入力引数を使用して、配列 X 内にある個々の非ゼロ要素の行と列の添字を返します。

[row,col,v] = find(___) はさらに、X の非ゼロ要素を含むベクトル v を返します。

すべて折りたたむ

3 行 3 列の行列内の非ゼロの要素を検出します。

X = [1 0 2; 0 1 1; 0 0 4]
X = 3×3

     1     0     2
     0     1     1
     0     0     4

k = find(X)
k = 5×1

     1
     5
     7
     8
     9

X に対して論理演算子 not を使用して、ゼロの位置を特定します。

k2 = find(~X)
k2 = 4×1

     2
     3
     4
     6

4 行 4 列の魔方陣行列に含まれる 10 未満の要素を、最初から 5 個検出します。

X = magic(4)
X = 4×4

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

k = find(X<10,5)
k = 5×1

     2
     3
     4
     5
     7

対応する X の要素を表示します。

X(k)
ans = 5×1

     5
     9
     4
     2
     7

特定の整数値を検出するには、== 演算子を使用します。例として、奇数の整数からなる 1 行 10 列のベクトル内で 13 に等しい要素を検索します。

x = 1:2:20
x = 1×10

     1     3     5     7     9    11    13    15    17    19

k = find(x==13)
k = 7

非整数値を検出するには、データに基づく許容誤差値を使用します。そうしない場合、浮動小数点の丸め誤差が原因で結果が空の行列になる場合があります。

y = 0:0.1:1
y = 1×11

         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000

k = find(y==0.3)
k =

  1x0 empty double row vector
k = find(abs(y-0.3) < 0.001)
k = 4

奇数インデックスの要素がすべてゼロに等しい 6 行 6 列の魔方陣行列を作成します。

X = magic(6);
X(1:2:end) = 0
X = 6×6

     0     0     0     0     0     0
     3    32     7    21    23    25
     0     0     0     0     0     0
     8    28    33    17    10    15
     0     0     0     0     0     0
     4    36    29    13    18    11

非ゼロ要素を "最後から数えて" 4 個検出します。

k = find(X,4,'last')
k = 4×1

    30
    32
    34
    36

4 行 4 列の行列内で、0 より大きく 10 より小さい要素を最初から数えて 3 個検出します。要素の行と列の添字を返すために 2 つの出力を指定します。

X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
X = 4×4

    18     3     1    11
     8    10    11     3
     9    14     6     1
     4     3    15    21

[row,col] = find(X>0 & X<10,3)
row = 3×1

     2
     3
     4

col = 3×1

     1
     1
     1

最初のインスタンスは X(2,1) で、値は 8 です。

3 行 3 列の行列内の非ゼロの要素を検出します。行の添字、列の添字、要素の値を返す 3 つの出力を指定します。

X = [3 2 0; -5 0 7; 0 0 1]
X = 3×3

     3     2     0
    -5     0     7
     0     0     1

[row,col,v] = find(X)
row = 5×1

     1
     2
     1
     2
     3

col = 5×1

     1
     1
     2
     3
     3

v = 5×1

     3
    -5
     2
     7
     1

4×2×3 の配列の非ゼロ要素を検出します。非ゼロ要素の行と列の添字を返す 2 つの出力 rowcol を指定します。入力が多次元配列 (N > 2) である場合、findcolX の後続の N-1 次元の線形インデックスとして返します。

X = zeros(4,2,3);
X([1 12 19 21]) = 1
X = 
X(:,:,1) =

     1     0
     0     0
     0     0
     0     0


X(:,:,2) =

     0     0
     0     0
     0     0
     1     0


X(:,:,3) =

     0     1
     0     0
     1     0
     0     0

[row,col] = find(X)
row = 4×1

     1
     4
     3
     1

col = 4×1

     1
     3
     5
     6

入力引数

すべて折りたたむ

入力配列。スカラー、ベクトル、行列または多次元配列として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
複素数のサポート: あり

検出する非ゼロの数。正の整数スカラーとして指定します。既定では、find(X,n)X 内の非ゼロ要素を最初から数えて n 個検出します。

探索方向。文字列 'first' または 'last' で指定します。X 内の非ゼロ要素を "最後から数えて" n 個検出するには find(X,n,'last') を使用します。

出力引数

すべて折りたたむ

非ゼロ要素のインデックス。ベクトルとして返されます。

  • X が行ベクトルの場合、k も行ベクトルになります。それ以外の場合は、k は列ベクトルになります。

  • X が空の配列であるか、非ゼロ要素を含まない場合、k は空の行ベクトルまたは空の列ベクトルになります。

  • findX が空行列 [] の場合、k は空行列 [] であるという規則を使用します。

X(k) を使用すると X 内の非ゼロ値を返すことができます。

行の添字。ベクトルとして返されます。rowcol を共に用いることで、X 内の非ゼロ要素に対応する添字 X(row,col) を指定します。

列の添字。ベクトルとして返されます。rowcol を共に用いることで、X 内の非ゼロ要素に対応する添字 X(row,col) を指定します。

XN > 2 の多次元配列である場合、colX の後続の N-1 次元の線形インデックスです。これは、関係 X(row(i),col(i)) == v(i) を保持します。

X の非ゼロの要素。ベクトルとして返されます。

詳細

すべて折りたたむ

線形インデックス

線形インデックスとは、A(k) のように、配列のインデックス付けに単一の添字を使用できるものです。MATLAB® は配列を、各列が前の列の最後に追加された単一の列ベクトルとして扱います。このため、線形インデックス付けは、列内の要素に対して上から下、左から右に番号を付けます。

たとえば 3 行 3 列の行列について考えます。A(2,2) の要素は A(5) で参照でき、A(2,3) の要素は A(8) で参照できます。線形インデックスは配列のサイズに依存して変化します。A(5) は、3 行 3 列の行列と 4 行 4 列の行列では異なる位置の要素を返します。

関数 sub2ind と関数 ind2sub が、添字と線形インデックスの間の変換に役立ちます。

ヒント

  • 条件を満たす配列要素を検出するには、find と共に関係式を使用します。たとえば、find(X<5) は、5 よりも小さい X の要素の線形インデックスを返します。

  • 条件 X<5 を満たす X 内の要素を直接検出するには、X(X<5) を使用します。X(find(X<5)) のような関数呼び出しは避けます。これは logical 行列に対して不必要な find を使用します。

  • X>1 のような関係演算と共に find を実行する際、関係演算の結果は 1 と 0 の logical 行列になる点に留意することが重要です。たとえばコマンド [row,col,v] = find(X>1) は、logical 1 (true) の列ベクトルを v に返します。

  • 行と列の添字 row および col は、線形インデックス k と次の関係があります。k = sub2ind(size(X),row,col)

拡張機能

バージョン履歴

R2006a より前に導入