我有一个纬度矩阵,一个经度矩阵,以及这些纬度/经度点的测量矩阵。
某些纬度/经度点有多个测量值。我想要一种从矩阵中删除重复测量的方法,只保留较大的测量值。
所以使用数据:
lat = [0,1,2,3,1,2]
lon = [0,1,2,3,1,4]
data = [5,6,7,8,9,10]
将删除(1,1)处的测量值为6的数据点,从而导致: lat = [0,2,3,1,2] lon = [0,2,3,1,4] data = [5,7,8,9,10]
答案 0 :(得分:2)
您可以在列为'rows'
和lat
变量的矩阵上使用unique
lon
选项。这将为您提供唯一的lat
和lon
组合和,它为您提供了一个索引(第三个输出),可以传递给accumarray
返回data
和lat
的每个唯一组合的lon
中的最大值。
% Find the unique combinations of latitude and longitude
[latlon, ~, inds] = unique([lat(:), lon(:)], 'rows', 'stable');
% Find the maximum value in data for each unique lat/lon combo
maxdata = accumarray(inds, data(:), [], @max);
% 5 9 7 8 10
% Expand out latlon variable if needed
latitude = latlon(:,1);
% 0 1 2 3 2
longitude = latlon(:,2);
% 0 1 2 3 4
如果您需要按data
值排序的纬度和经度(正如您在问题中所示):
[maxdata, ind] = sort(maxdata);
% 5 7 8 9 10
latitude = latlon(ind,1);
% 0 2 3 1 2
longitude = latlon(ind,2);
% 0 2 3 1 4