在2个向量中找到对元素

时间:2014-06-05 13:56:59

标签: matlab vector

我有一个非常愚蠢的问题,我无法以有效的方式解决这个问题:

假设我有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的第二个元素应该检查剩余的“自由”元素......

1 个答案:

答案 0 :(得分:1)

要找到AB中最近元素的每个元素:

[~, 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}}