Как создать матрицу k-ближайшего соседа для пространственного кадра данных? - PullRequest
4 голосов
/ 10 февраля 2012

У меня есть пространственный фрейм данных с около 3000 точек.Я хочу сгенерировать матрицу, которая предоставляет k (в данном случае 30) ближайших соседей для каждой точки.

Я могу сделать это с помощью цикла, но я чувствую, что должен быть элегантный и оптимальный способ для пространственных точеккласс данных, о котором я не знаю.

1 Ответ

5 голосов
/ 10 февраля 2012

Вероятно, самым быстрым является использование пакета RANN - при условии, что у вас есть x и y:

library(RANN)
m <- as.matrix(nn(data.frame(x=x, y=y, z=rep(0,length(x))), p=30)$nn.idx)

дает вам матрицу 3000 х 30 ближайших соседей. Это на несколько порядков быстрее, чем наивный квадратичный поиск.

Редактировать: Просто для полноты значения не имеет значения, какой интерфейс ANN вы выберете, с FNN (предложено Spacedman) это будет

library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index
...