我想找到大约2000 X的数据集的4个最近邻居,X和Y方向的Y坐标,沿着Y轴和沿着X轴的点之间的距离变化。例如:distance along x-axis = 5, distance along y-axis=3
下面的图片显示了我想要为单点实现的示例。数据集的结尾/边缘处的点将相应地具有3个(在角落中 - 2个)邻居。
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
上面的代码到目前为止工作得非常好,但我想知道是否有一种更短的更有效的方法来寻找邻居?