Matlab: find 関数

informatics/commands_matlab/find_matlab
7-31-2017 updated

  1. 概要: find 関数とは
  2. find を使って、行列の特定の値を置換

広告

概要: find 関数とは

MATLAB の find は、それ自身の形が表に出てこないので、少しイメージしにくい関数かもしれない。実例でみてみよう。

>> a=magic(5)
a =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

>> apos=find(a==19); 
% 行列 a において、要素が 19 である場所を apos とする。

>> b=rand(5)
b =
    0.9955    0.3521    0.8951    0.9502    0.1747
    0.6209    0.8222    0.6915    0.0704    0.9550
    0.6636    0.4841    0.8390    0.7800    0.9177
    0.9270    0.9317    0.0023    0.8174    0.8730
    0.7535    0.1918    0.2318    0.8636    0.4841

>> c=b(apos)
% 行列 b において、apos の位置にあるものを c とする。

c = 0.0023

のように find 関数そのものを位置情報として扱える のである。


find を使って、行列の特定の値を置換する

これも、実例を見るのがわかりやすいだろう (1)。


>> x=magic(4)
x =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

>> xpos=find(x>10)

xpos =
     1
     6
     8
    12
    13
    15

% find の中身は、このように位置を示す数字になっている。

>> x(xpos)=0
x =
     0     2     3     0
     5     0    10     8
     9     7     6     0
     4     0     0     1


これは、find が位置を示すという点で以下の 2 例と共通するところがある。

>> x(1,2)=0
x =
     0     0     3     0
     5     0    10     8
     9     7     6     0
     4     0     0     1

>> x(:,:)=0
x =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0


なお、このような置換は実は find を使わなくても可能で、単に >> x(x>10)=0 とすれば OK である (1)。計算時間も短縮することができるが、多次元の配列を扱う場合は、find で位置情報を保存しておいた方が何かと便利なときもある。


コメント欄



フォーラムを作ったので、各ページにあるコメント欄のうち、コメントがついていないものは順次消していきます。今後はフォーラムをご利用下さい。管理人に直接質問したい場合は、下のバナーからブログへ移動してコメントをお願いします。

References

  1. 文六メモ matlab: find いらずの一発参照・代入. Link.