这是一种手动方法。最好使用@rahnema1的答案。
您可以使用三列矩阵data
,其中列分别表示x、y、z。然后,给定一个两列输入xy
,其中列表示x、y,在data
中搜索最近的点可以通过以下方式完成:
- 计算矩阵
dist
,其中包含data
和xy
之间的所有距离。最简单的方法是使用统计工具箱中的pdist2
,它允许您指定欧几里德或任何其他所需的距离。或者可以手动完成;请参见下面的步骤。
- 获取
xy
中每个点到data
中所有点的距离的arg min。这由min
的第二个输出给出。
- 使用该值作为索引进入
data
矩阵。
data = [ 1 2 10;
1.5 1.1 90;
3.2 1.9 40;
-0.3 -3.4 -60;
4.2 2.1 50];
xy = [2.4 3;
6.5 1.8];
dist = pdist2(data(:,[1 2]), xy, 'euclidean');
[~, ind] = min(dist, [], 1);
result = data(ind,3);
gives
result =
40
50
If you don't have the Statistics Toolbox, the squared Euclidean distances can be computed manually using implicit singleton expansion or bsxfun
:
dist = sum((permute(data(:,[1 2]), [1 3 2])-permute(xy, [3 1 2])).^2, 3);
or
dist = sum((bsxfun(@minus, permute(data(:,[1 2]), [1 3 2]), permute(xy, [3 1 2]))).^2, 3);