Нахождение ближайшего соседа в одной точке в MATLAB - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь выполнить поиск ближайшего соседа, который возвращает одну точку как «ближайшего соседа» к другой точке в matlab.

У меня есть следующие данные:

  1. Сетка долготы размером 336x264 "lon"
  2. некоторая случайная точка в пределах сетки долготы "dxf"

Я пробовал использовать "knnsearch" MATLAB"function

https://www.mathworks.com/help/stats/knnsearch.html

Но, к сожалению, когда я использую команду:

idx = knnsearch(lon, dxf)

Я сталкиваюсь с ошибкой:

"Y must be a matrix with 264 columns."

Есть ли альтернативный поиск ближайшего соседа, который я могу использовать, чтобы найти ближайшего соседа в одной точке в MATLAB?Есть ли более простое решение, которое я могу реализовать?

Я буквально хочу найти ближайшую точку в матрице "lon", чтобы указать "dxf".

Спасибо!Taylor

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Если вы работаете без наборов инструментов, вы можете сами создать простую формулу расстояния:

xx = [0:364];  % Not sure what your limits were so just making some up here
yy = [0:264];
[X, Y] = meshgrid(xx,yy);
dxf = [221.7, 109.1];  % Again just pulling numbers from nether regions 

G = [X(:),Y(:)];
d = sqrt( sum( (G-dxf).^2, 2) );
[minDist, idxMinDist] = min(d);
solution = G(idxMinDist,:);

Вы можете изменить пределы для xx и yy, чтобы они соответствовали вашей конкретной установке.

0 голосов
/ 25 февраля 2019

Сначала вы должны преобразовать вашу сетку в матрицу n-by-2 (если вы создали ее с помощью meshgrid, это просто G = [XX(:) YY(:)]), затем вы можете попробовать ее с помощью pdist2, если у вас есть Панель инструментов статистики и машинного обучения (что вы делаете):

[D,I] = pdist2(P, G, 'euclidian', 'Smallest', 1);

Где G - это сетка, а P - это ваш m-by-2 массив точек для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...