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

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

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


person user2760    schedule 10.02.2012    source источник


Ответы (1)


Вероятно, самым быстрым является использование пакета 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 x 30. Это на несколько порядков быстрее, чем наивный квадратичный поиск.

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

library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index
person Simon Urbanek    schedule 10.02.2012
comment
Как он сравнивается с get.knn из пакета: FNN? - person Spacedman; 10.02.2012
comment
Вероятно, так же, как они оба используют библиотеку ИНС. Для маленьких размеров здесь это не имеет значения. Вышеупомянутое в FNN будет get.knn(data.frame(x=x,y=y),30)$nn.index, так что выберите свой фаворит :) Результаты идентичны. - person Simon Urbanek; 10.02.2012