ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

rangesearch

データを使用した指定距離内のすべての近傍の探索

構文

idx = rangesearch(X,Y,r)
[idx,D]= rangesearch(X,Y,r)
[idx,D]= rangesearch(X,Y,r,Name,Value)

説明

idx = rangesearch(X,Y,r) は、Y 点の距離 r 内にあるすべての X 点を検索します。XY の行は観測値に対応し、列は変数に対応します。

[idx,D]= rangesearch(X,Y,r) は、Y の各行と r 以下の距離にある X の行の間の距離を返します。

[idx,D]= rangesearch(X,Y,r,Name,Value) では、1 つまたは複数の Name,Value の引数ペアで指定された追加オプションを使用して、近接点を計算します。

入力引数

X

mx 行 n 列の数値行列で、各行が 1 つの n 次元の点を表します。n の列数は、Y の列数と等しくなければなりません。

Y

my 行 n 列の数値行列で、各行が 1 つの n 次元の点を表します。n の列数は、X の列数と等しくなければなりません。

r

半径 (スカラー) を検索します。rangesearch は、各 Y 点からの距離 r 内にあるすべて X 点 (行) を検索します。距離の意味は、Distance 名前と値のペアによって異なります。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

'BucketSize'

kd ツリーの葉ノード内のデータ点の最大数。この引数は、kd ツリーが最近傍点を検索する場合にのみ意味があります。

既定値: 50

'Cov'

マハラノビス距離を計算する際に共分散行列を示す正定行列。この引数は、Distance 名前と値のペアの引数が 'mahalanobis' の場合にのみ有効です。

既定値: nancov(X)

'Distance'

距離計量を指定する文字ベクトル、string スカラーまたは関数ハンドル。

説明
'euclidean'ユークリッド距離。
'seuclidean'標準化されたユークリッド距離。X と各クエリ点の間の各座標差分がスケーリングされます。つまり、スケール値 S で除算されます。S の既定値は XS = nanstd(X) から計算される標準偏差です。S に別の値を指定するには、Scale 名前と値のペアの引数を使用します。
'mahalanobis'正定共分散行列 C を使用して計算される、マハラノビス距離。C の既定値は X の標本共分散行列であり、nancov(X) によって計算されます。C に別の値を指定するには、'Cov' 名前と値のペアの引数を使用します。
'cityblock'市街地距離。
'minkowski'ミンコフスキー距離。既定の指数は 2 です。別の指数を指定するには、'P' 名前と値のペアの引数を使用します。
'chebychev'チェビシェフ距離 (最大座標差)。
'cosine'1 から、ベクトルとして扱われる観測間の夾角の余弦を引きます。
'correlation'1 から、一連の値として扱われる観測間の標本線形相関係数を引きます。
'hamming'異なる座標の比率を示すハミング距離。
'jaccard'1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。
'spearman'1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。
@distfun

距離関数ハンドル。distfun は次の形式です

function D2 = distfun(ZI,ZJ)
...
ここで、

  • ZI は 1 行の X または Y を含む 1N 列のベクトルです。

  • ZJ は複数行の X または Y を含む M2N 列の行列です。

  • D2M21 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(k,:) の間の距離です。

定義については距離計量を参照してください。

既定値: NS.Distance

'NSMethod'

最近傍探索法。

意味
'kdtree'

最近傍点を見つけるために kd ツリーを作成して使用します。'kdtree' は距離計量が次のいずれかである場合にのみ有効です。

  • 'chebychev'

  • 'cityblock'

  • 'euclidean'

  • 'minkowski'

'exhaustive'網羅的探索アルゴリズムを使用します。最近傍点を求めるために、すべての X 点から各 Y 点までの距離が計算されます。

既定値: 'kdtree' X の列数が 10 より大きくない場合、X はまばらではなく、距離計量は有効な 'kdtree' メトリックの 1 つです。それ以外の場合は、既定値は 'exhaustive' です。

'P'

ミンコフスキー距離の指数を示す、正のスカラー。この引数は、Distance 名前と値のペアの引数が 'minkowski' の場合にのみ有効です。

既定値: 2

'Scale'

非負値を含み、X 内の列数と同じ長さをもつベクトル SX とクエリ点の間の各座標差分は、S の対応する要素でスケーリングされます。この引数は、Distance 名前と値のペアの引数が 'seuclidean' の場合にのみ有効です。

既定値: nanstd(X)

出力引数

idx

my 行 1 列の cell 配列。ここで my は Y の行数です。idx{I} には、 Y(I,:) までの距離が r 以下である X の点 (行) のインデックスが含まれます。idx{I} 内のエントリは距離の昇順です。

D

my 行 1 列の cell 配列。ここで my は Y の行数です。D{I}Y(I,:) から idx{I} で対応する点までの距離値を含みます。

Y 点のユークリッド距離 1.5 内にある X 点を求めます。XY は、5-D 正規分布変数の標本です。

rng('default') % for reproducibility
X = randn(100,5);
Y = randn(10,5);
[idx, dist] = rangesearch(X,Y,1.5)

idx = 
    [1x7  double]
    [1x2  double]
    [1x11 double]
    [1x2  double]
    [1x12 double]
    [1x9  double]
    [         89]
    [1x0  double]
    [1x0  double]
    [1x0  double]

dist = 
    [1x7  double]
    [1x2  double]
    [1x11 double]
    [1x2  double]
    [1x12 double]
    [1x9  double]
    [     1.1739]
    [1x0  double]
    [1x0  double]
    [1x0  double]

この場合、最後の 3 つの Y 点はいずれの X 点からも 1.5 を超える距離にあります。X(89,:)Y(7,:) から 1.1739 の距離にあり、Y(7,:) から 1.5 の範囲内にある X 点は他にはありません。Y(5,:) から距離 1.5 以内の X には、12 の点があります。

詳細

すべて折りたたむ

距離計量

定義については距離計量を参照してください。

ヒント

  • 固定の正の整数 K の場合、knnsearch は各 Y 点に最も近い XK 点を検索します。これに対して、正の実数値 r の場合、rangesearch は各 Y 点の距離 r 内にあるすべての X 点を検索します。

アルゴリズム

kd 木アルゴリズムの概要については、kd 木を使用した K 最近傍点検索を参照してください。

網羅的探索アルゴリズムでは、X 内の各点から Y 内の各点への距離を求めます。

代替方法

rangesearch は、距離を探索するための ExhaustiveSearcher の関数です。これは、NSMethod 名前と値のペアを 'exhaustive' に設定した関数 rangesearch と同等です。

rangesearch は、距離を探索するための KDTreeSearcher の関数です。これは、NSMethod 名前と値のペアを 'kdtree' に設定した関数 rangesearch と同等です。

拡張機能

R2011b で導入