2

假设我有以下 2 个向量:

a = [1 3 5 7 8 9 10 15 16];
b = [2 4 14];

有没有我可以使用的函数,以便对于 中的每个元素b,我可以找到与该元素最接近的值的索引,a而无需“遍历”我正在搜索的值?预期的输出将是:

[1 2 7]

我发现以前的答案可以找到最接近的值,但不是最接近的值而不超过正在搜索的值。

4

1 回答 1

3

已编辑:现在使用单线:

[~,index] = max(repmat(a,numel(b),1) + 0./bsxfun(@le,a,b'), [], 2)
'#% The 0./(0 or 1) creates a NaN mask where the condition
#% isn't met, leaving only the desired values in the matrix     
#% max ignores NaNs, conveniently                  

这不是一个内置函数,但它非常简单(ideone 上的链接):

a = [1 3 5 7 8 9 10 15 16];
b = [2 4 14];

c = bsxfun(@minus,b',a) #%' transpose b

c(c<0)=nan; #% discard the values in a greater than b
[~,ci] = min(c,[],2) #% min ignores nan
d = a(ci) #% if you want the actual values of a

输出:

c =

    1   -1   -3   -5   -6   -7   -8  -13  -14
    3    1   -1   -3   -4   -5   -6  -11  -12
   13   11    9    7    6    5    4   -1   -2

ci =

   1
   2
   7

d =

    1    3   10
于 2013-08-01T00:44:47.663 回答