Rの2つのポイントパターン間の2番目に近い隣人を取得する方法は?


12

Rの2つのポイントパターン間の2番目に近い隣の距離を取得する方法はありますか?spatstatパッケージにはnncrossという関数がありますが、2つのパターン間の最近傍にのみ適用され、2番目の最近傍への距離が必要です。

回答:


9

パッケージFNNの関数get.knnxは、ポイントパターンでN最近傍を計算できます。

x1 = cbind(runif(10),runif(10))
x2 = cbind(runif(10),runif(10))
nn = get.knnx(x1,x2,2)

現在、nn $ nn.indexは、nn $ nn.index [i、j]がx2の行iの2つの最近傍のx1の行であるような行列です-最も近い値が[i、1]になるようにソート次の隣人は[i、2]です。

この関数は距離も返します。また、非常に高速な検索のために空間インデックスを計算するオプションもあります。


ありがとう。ただし、少し問題が発生しました。私のデータはクラス 'ppp'です(spatstatで使用するため)。get.knnwにプラグインすると、次のエラーが発生します。> get.knnx(rp、ponderosa、2)のエラー:.C
RK

pppオブジェクトでas.data.frameを使用して座標を取得するだけです。
Spacedman

nndistとnnwhichもこのタスクに対応しますか?ただ、今日のR-SIG-GEOリストにこの2つの機能に気づいた...
ローマLuštrik

nndistとnnは、1つのタイプのポイントから別のタイプのポイント(get.knnxが実行するもの)までではなく、単一のポイントパターン(get.knnが実行するもの)内で最も近い距離のみを計算します。また、algorithm = "kd_tree"を使用すると、get.knnはnndistの2倍の速度になります。
Spacedman

@Spacedmanわかった。ありがとう。クロスディストを見ました。get.knnxのように動作するようです。それも試してみます。コメントを読む前に、cbindを使用してX座標とY座標を取得しました。どうもありがとう。R初心者はこちら。主にPythonの男。
RK

6

私はちょうどことを発見しspatstatがありcrossdist機能を。

説明

2つの異なるデータセットから取得した「モノ」のペア間の距離を計算します。

入力として2つの点パターンXとYを取り、[i、j]エントリがX [i]からY [j]までの距離である行列を返します。crossdistを使用して2番目に近い近傍を取得するには:

xdistances <- crossdist(X, Y)  #Get all cross distances    

nn = numeric() 
for (i in 1:nrow(X)) {   
  xdistance <- sort(xdistances[i,], partial=2)[2]   
  nn <- append(nn, xdistance)
}

Spacedmanの回答をすでに受け入れましたが、別の方法でそれをどのように行ったかを共有したいと思います。


0

パッケージnndist内の関数には、近隣の順序を決定spatstatする引数がありますk。2番目の最近傍距離を取得するには、を使用しますk=2。最初の隣人と2番目の隣人の両方を取得するには、を使用しますk=1:2

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.