假设我有两组矩阵(A and B),每个矩阵内部都包含几个点坐标,我想找出其中的点B最近到A并输出元胞数组C相应地列出最近的点对坐标和一个元胞数组D注册未配对的位置,我该怎么做?
更具体地说,这就是我想要的
两组矩阵包含点xy坐标;
A=[ 1 2; 3 4]; B=[1 3; 5 6; 2 1];
想要得到C{1,1}=[1 2; 1 3]; C{2,1}= [3 4; 5 6]; D{1,1}=[2 1];
谢谢您的帮助。
这个问题没有一种解决方案,例如(一维,但可扩展到 N 维)情况:
A= [1; 3];
B= [2];
然后要么A(1)
or A(2)
可以是剩下的点。您的算法会输出哪一个,取决于它的工作原理,即您首先采用哪个点来找到最近的点。
在我看来,这种算法包括
-
找出每个组合之间的距离A(i)
and B(j)
。如果你有统计工具箱,pdist2为你做这个:
A=[ 1 2; 3 4];
B=[1 3; 5 6; 2 1];
dist = pdist2(A,B);
-
循环遍历最小的A
or B
(我会取A,因为它在你的例子中是最小的)并找到其中的每个点A
剩余集合中最近的点B
:
N = size(A,1);
matchAtoB=NaN(N,1);
for ii=1:N
dist(:,matchAtoB(1:ii-1))=Inf; % make sure that already picked points of B are not eligible to be new closest point
[~,matchAtoB(ii)]=min(dist(ii,:));
end
matchBtoA = NaN(size(B,1),1);
matchBtoA(matchAtoB)=1:N;
remaining_indices = find(isnan(matchBtoA));
-
将结果组合到您想要的输出矩阵C
and D
:
C=arrayfun(@(ii) [A(ii,:) ; B(matchAtoB(ii),:)],1:N,'uni',false);
D=mat2cell(B(remaining_indices,:),ones(numel(remaining_indices),1),size(B,2));
请注意,此代码也适用于 1D 点或更高点 (A-N-D),即pdist2
将一切展平为标量距离。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)