2013-07-30 70 views
0
A = [1 3 5 8] 
B = [1 2 3 4 5 6 7 8] 

我想创建矢量C返回元件的ROWNUMBER在矢量A与最小的非负差值的每个元件在矢量B元件之间的最小正差。查找矢量

因此,考虑到上面的例子中,它应该返回:

C = [1 2 2 3 3 4 4 4]  
+2

欢迎堆栈溢出。如果你展示你所尝试过的东西,你会得到更多的帮助,并解释你卡在哪里。请查看页面顶部的“帮助”链接,了解网站的内容,如何提出问题等。 – John

+0

数组是否总是按照您的示例排序? – japreiss

+0

是的,数组总是排序的。 – AJM

回答

1

我敢肯定有很多方法可以做到这一点。这里有一个:

A = [1 3 5 8] 
B = [1 2 3 4 5 6 7 8] 

%create matrices of the values to subtract 
[a,b] = meshgrid(A,B); 
%subtract 
aLessB = a-b; 
%make sure we don't use the negative values 
aLessB(aLessB < 0) = Inf; 
%sort the subtracted matrix 
[dum, idx] = sort(aLessB, 2, 'ascend'); 

idx(:,1)是您正在寻找的解决方案。

1

的替代解决方案:

D = bsxfun(@minus, A', B); 
D(D < 0) = Inf; 
[~, C] = min(D, [], 1);