Как найти ближайшие точки в векторах? - PullRequest
0 голосов
/ 26 января 2020

У меня есть таблица 71x4, которая представляет: название какой-либо климатической станции и соответствующую широту, долготу и высоту.

В этом списке я хочу найти ближайшую точку вместе. Я имею в виду, что на выходе я хочу иметь одну ближайшую станцию ​​для каждых 71 имеющейся у меня станции. Я хочу использовать евклидово расстояние. Я поделился coordinates.mat здесь, на Google Диске

ОБНОВЛЕНИЕ Вот мой код. Я думаю, было бы здорово, если бы я мог запустить свой код для одной станции, а затем использовать для l oop его обобщение. У меня есть названия некоторых станций и соответствующие широта, долгота и высота. Я хочу найти ближайшие станции. Фактически для каждой строки мне нужно вычислить расстояние до всех остальных строк и выбрать ту, которая имеет наименьшее расстояние.

Ahvaz = coordinates{5,{'lat','lon','station_elevation'}};
coordinates(5,:)=[]
All = coordinates{:,{'lat','lon','station_elevation'}};
distances = sqrt(sum(bsxfun(@minus, All, Ahvaz).^2,2));
closest = All(distances==min(distances),:);

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

1 Ответ

1 голос
/ 26 января 2020

Самый простой способ - использовать knnsearch(...,'k',1) с 'K',1, так как вы хотите видеть только ближайшую точку. Однако для этой функции требуется набор инструментов статистики и машинного обучения. В противном случае вам придется кодировать его самостоятельно, проходя все точки и вычисляя расстояние до всех остальных точек, как было сказано ранее.

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