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

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) に最も近い点を抽出するには,reshapeを使って(X,Y)の格子点を Nx2 配列に変換する.

[IDX,D] = knnssearch([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 (6d)