2013-07-30 112 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);