特定の値に最も近い値(点)の抽出

値の近さと距離の近さについて考える.

ちなみに,下記で使われている関数 knnsearch を使うには,
Statistics and Machine Learning Toolbox が必要.

1次元ベクトルから最も近い値の抽出

ベクトルX (ny 行1列)の中から,ある値 P に最も近い値を探す.

IDX = knnsearch(X,P)

このとき,Xは縦のベクトルでないとエラーを返すので注意.Nx1 配列はOK, 1xN 配列はエラーになる.
IDX はインデックスで,X(IDX) が最も P に近い値となる.

2次元空間の格子点から,指定点と最も距離が近い点(最近傍点)の抽出

基本形は下記の通り.x0,y0 (それぞれ Nx1 配列)または P (Nx2 配列)の N 個の点に対する最近傍点を検出する.
入力引数は2つであることに注意.

[IDX,D] = knnsearch([X,Y], [x0 y0]) % 方法1
[IDX,D] = knnsearch([X,Y], P) % 方法2 P = [x y]

matlab 関数 meshgrid で出力される X,Y のような2次元空間について,ある点 (x0,y0) に最も近い点を抽出するときは,(X,Y) のペアを Nx2 配列に変換する.

[IDX,D] = knnsearch([X(:), Y(:)],[x0, y0])
%[IDX,D] = knnsearch([reshape(X, [ny*nx, 1]), reshape(Y,[ny*nx, 1])],[x0, y0]) % 長く書くと

D は最近傍点と (x0,y0) との距離.
IDX は最近傍点の線形インデックス.ind2sub で線形インデックスを変換することで,最近傍点の X,Y 座標がわかる.

% (X,Y) の中で (x0,y0) に最も近い点の抽出
XX = X(IDX);
YY = Y(IDX);

% 線形インデックスから最近傍となる配列の要素を抽出
[row,col] = ind2sub(size(X),IDX)


参考 MathWorks公式


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2019-01-15 (Tue) 17:19:45 (617d)