最大値(最小値)がある要素の抽出

配列の最大値,最小値を求めるだけでなく,その場所(インデックス,配列の添字)を知りたいことがよくある.
2次元配列 A(x,y) であれば,

[row,col] = find(A == max(A(:)));

でAij の添字i,j を求められる.
しかし,findの出力引数は2次元までしか対応していない.そのため,3次元以上の A(x,y,z) や A(t,x,y) , A(t,x,y,z) の場合は,線形インデックスから変換する必要がある.
findの出力引数を1つにして,

ind = find(A == max(A(:))); %方法①
[maxval,ind] = max(A(:)); %方法②
[i,j,k] = ind2sub(size(A),ind);

で取得可能(i,j,k の部分は行列Aの次元の個数と一致させる).
最大値,最小値でなくとも,findであれば,特定の値を含んだ要素を抽出するのに使える.
最大最小値の場合は方法②のmaxとminで返される線形インデックスを使った方がスマートかも.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2017-10-20 (Fri) 06:02:47 (54d)