找到坐标的邻居的有效方法,取决于方向 - Matlab

时间:2016-06-10 07:19:40

标签: matlab nearest-neighbor

我想找到大约2000 X的数据集的4个最近邻居,X和Y方向的Y坐标,沿着Y轴和沿着X轴的点之间的距离变化。例如:distance along x-axis = 5, distance along y-axis=3

下面的图片显示了我想要为单点实现的示例。数据集的结尾/边缘处的点将相应地具有3个(在角落中 - 2个)邻居。

enter image description here

BML是矩阵2000 x3(第2列中的X,第3列中的Y),x / y_blockdimension是点之间的距离。

for NB=1:length(BML);
NB_list=zeros(4,1);
%in +x direction
if isempty(find(BML(:,2)==BML(NB,2)+x_blockdimension & BML(:,3)==BML(NB,3), 1));
    NB_list(1,1)=0;
else
    NB_list(1,1)=find(BML(:,2)==(BML(NB,2)+x_blockdimension)& BML(:,3)==BML(NB,3));

end
%in - x direction
 if isempty(find(BML(:,2)==BML(NB,2)-x_blockdimension & BML(:,3)==BML(NB,3), 1));
    NB_list(2,1)=0;
else
    NB_list(2,1)=find(BML(:,2)==(BML(NB,2)-x_blockdimension)& BML(:,3)==BML(NB,3));

 end

 %in +y direction
 if isempty(find(BML(:,3)==BML(NB,3)+y_blockdimension & BML(:,2)==BML(NB,2), 1));
    NB_list(3,1)=0;
else
    NB_list(3,1)=find(BML(:,3)==(BML(NB,3)+y_blockdimension)& BML(:,2)==BML(NB,2));

 end
%in -y direction
 if isempty(find(BML(:,3)==BML(NB,3)-y_blockdimension & BML(:,2)==BML(NB,2), 1));
    NB_list(4,1)=0;
else
    NB_list(4,1)=find(BML(:,3)==(BML(NB,3)-y_blockdimension)& BML(:,2)==BML(NB,2));

end

NB_list_all(NB,:)=NB_list;
end

上面的代码到目前为止工作得非常好,但我想知道是否有一种更短的更有效的方法来寻找邻居?

0 个答案:

没有答案