R'de iki nokta paterni arasında en yakın ikinci komşuya nasıl ulaşılır?


12

R'de iki nokta paterni arasındaki en yakın ikinci komşunun mesafesini almanın bir yolu var mı? Spatstat paketi nncross adlı bir işleve sahiptir, ancak yalnızca iki desen arasındaki en yakın komşular için geçerlidir ve en yakın ikinci komşulara olan mesafelere ihtiyacım var.

Yanıtlar:


9

FNN paketindeki get.knnx işlevi, N-en yakın komşularını nokta düzeninde hesaplayabilir.

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

şimdi nn $ nn.index, nn $ nn.index [i, j], x2'de i satırına en yakın iki komşunun x1'indeki sıra olacak şekilde bir matristir - en yakın olan [i, 1] ve sonraki komşu [i, 2].

İşlev sizin için mesafeleri de döndürür ve çok hızlı aramalar için uzamsal dizinleri hesaplamak için bazı seçeneklere sahiptir.


Teşekkürler. Yine de bir sorun biraz koştu. Verilerim 'ppp' sınıfında (spatstat ile kullanım için). Ben get.knnw takın, aşağıdaki hatayı alıyorum> get.knnx (rp, ponderosa, 2) hata: listeler çoğaltılmalıdır .C
RK

Sadece ppp nesnenizde as.data.frame kullanarak koordinatları çıkarın.
Spacedman

Nndist ve nnwhich da bu göreve hazır olur mu? Bugün r-sig-geo listesindeki bu iki işlevi fark ettim ...
Roman Luštrik

nndist ve nnBir noktadan başka bir nokta türüne (get.knnx'in yaptığı) değil, yalnızca tek bir nokta deseni (get.knn'in yaptığı) olan en yakın mesafeleri hesaplar. Ayrıca, algoritma = "kd_tree" kullanırsanız get.knn, nndist değerinin iki katıdır.
Spacedman

@ Spacedman Anladım. Teşekkürler dostum. Az önce crossdist gördüm. Get.knnx gibi çalışıyor. Bunu da deneyeceğim. Yorumunuzu okumadan önce cbind kullanarak X ve Y koordinatlarını aldım. Çok teşekkürler. R acemi burada. Çoğunlukla bir Python adamı.
RK

6

Sadece keşfetti spatstat bir sahiptir crossdist işlevi.

Açıklama

İki farklı veri kümesinden alınan 'şeyler' çiftleri arasındaki mesafeleri hesaplar.

Girişler olarak X ve Y iki nokta deseni alır ve [i, j] girişi X [i] ile Y [j] arasındaki mesafe olan matrisi döndürür. Crossdist kullanarak en yakın ikinci komşuları almak için:

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'ın cevabını zaten kabul ettiğimi biliyorum ama bunu nasıl yaptığımı başka bir şekilde paylaşmak istiyorum.


0

Fonksiyon nndistolarak spatstatpaketin bir argüman kkomşu sırasını belirler. En yakın ikinci komşu mesafeyi bulmak için tuşunu kullanın k=2. Hem birinci hem de ikinci komşuları almak için kullanın k=1:2.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.