我有一个非常愚蠢的问题,我无法以有效的方式解决这个问题:
假设我有2个载体
A = [1 20];
B = [3 16 18];
我想要一个矩阵C,其中包含更近的对元素的索引
C = [1 1;
2 3];
在这种情况下也应该起作用
A = [1 3];
B = [5 10];
我的代码将A的元素与B的第一个元素相关联。相反,结果应为
C=[1 1
2, 2];
这个结果背后的逻辑是: 因为A的第一个元素已经与B的第一个元素相关联,所以A的第二个元素应该检查剩余的“自由”元素......
答案 0 :(得分:1)
要找到A
中B
中最近元素的每个元素:
[~, ii] = min(abs(bsxfun(@minus, A(:).', B(:))));
C = [1:numel(A); ii].';
为A
中剩余的元素中最接近的元素B
找到C = [(1:numel(A)).' NaN(numel(A),1) ]; %'// initiallize
ind = 1:numel(B); %// list of candidate elements
for k = 1:numel(A)
[~, m] = min(abs(A(k)-B(ind))); %// compute distances. Find closest element
C(k,2) = ind(m); %// take note of closest
ind = [ind(1:m-1) ind(m+1:end)]; %// remove picked element from the list
end
的每个元素:在这种情况下,循环似乎很难避免。您可以按照以下方式进行操作:
{{1}}