Поиск значений Lon, которые расположены близко друг к другу в неравных списках - PullRequest
0 голосов
/ 21 марта 2019

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

Один из них называется Lon_pair, а другой - Lon_epa.

Lon_pair имеет размер

size(Lon_pair) 
12635       1

Lon_epa имеетsize

size(Lon_epa)
20560       1

Как найти точки в Lon_pair, которые близки к точкам в Lon_epa?Или найти разницу между ними?

Редактировать: Добавление кода

clear all
close all

filename_pair = 'C:\Users\tadams15\Desktop\ALL_PAIR.csv';
data = xlsread(filename_pair);

Lon_pair = data(:,2);
Lat_pair = data(:,3);
Label_pair = data(:,4);

filename_epa = 'C:\Users\tadams15\Desktop\aqs.csv'
data2 = xlsread(filename_epa);
Lon_epa = data2(:,4);
Lat_epa = data2(:,5);

%% Find Lat/Lon Combos
for j = 1:20560
for i = 2:12636
        d_lon(j) = Lon_epa(:) - Lon_pair(i);
        d_lon_m(j) = d_lon/(9e-06);
        if d_lon(:) < 300
           [row,col] = find(d_lon)
        end
end
end

1 Ответ

1 голос
/ 24 марта 2019

Это не самый эффективный способ для очень больших наборов данных, но он может работать для вас (или, по крайней мере, быть отправной точкой). Ниже двойные циклы по обоим наборам данных, находит расстояния между точками, сохраняет минимальный и номер строки набора сопутствующих данных, соответствующие минимальному расстоянию.

% set up dummy data to mimic UTM x,y (northing,easting) coordinates
x1 = randi([0,50000],20,1);
y1 = randi([-230000,420000],20,1);

x2 = randi([0,50000],12,1);
y2 = randi([-230000,420000],12,1);
% end set up


mydist = NaN(length(x1), 2); % pre-allocate

for ii = 1:length(mydist)
    xa = x1(ii);
    ya = y1(ii);
    temp_dist = NaN(length(x2), 2);
    for jj = 1:length(x2)
        xb = x2(jj);
        yb = y2(jj);
        temp_dist(jj, 1) = sqrt((xa-xb)^2 + (ya-yb)^2); % if you have the Statistics Toolbox, you can just use pdist
        temp_dist(jj, 2) = jj; % this is the row number in set2
    [value, index] = min(temp_dist(:,1));
    mydist(ii, 1) = value;
    mydist(ii, 2) = temp_dist(index, 2);
    end
end

mydist_table = array2table(mydist);
mydist_table.Properties.VariableNames = {'Clostest_Distance', 'Set2_RowNumber'};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...