読者です 読者をやめる 読者になる 読者になる

粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

matlabで行列の特定の値を持つ行を検出・置換・削除する

今回はfind関数を主に使っていきたいと思います。

find:特定の条件に一致する部分を調べる

等号条件

例> 行列 A から値が0である箇所を探す。

find(A==0)

この際の出力はスカラーです。m行n列のi行j列目にある場合は,i*n+j として出力されることに注意。

以下のようなコードを書いて位置との対応を掴んでください。

mg = magic(4)
find(mg==1)

なお,後ろにfind(A==0,3)などと数値を列挙すると条件に一致する部分のうち数値の数だけ列挙してくれます。

不等号条件

例> 行列 A から値が10より大きい箇所を探す。

find(A>10)

特定の条件に一致する部分を置換

先程調べた箇所を行列に代入することで置換できます。

試しに行列の中で特定の条件を満たす部分を0にしてみましょう。

mg = magic(4)
place = find(mg>10)
mg(place)=0

魔法陣mgのうち,10より大きい成分の位置がplaceに入り,
mgのうちのplaceに該当する部分をまとめて0に置換できています。

これは,次のように縮めて書くことがおおいです。

mg = magic(4)
mg(find(mg>10)) = 0

特定の条件に一致する部分を削除

同様に特定の値ではなく [] を代入することで該当する箇所を削除可能です。

例>ベクトルAのうち,0に該当する箇所を削除。

A(find(A==0)) = []

なお,この作業は行列の場合行ごと,列ごとにやらないとエラーがでるようです。