假设我有以下 2 个向量:
a = [1 3 5 7 8 9 10 15 16];
b = [2 4 14];
有没有我可以使用的函数,以便对于 中的每个元素b
,我可以找到与该元素最接近的值的索引,a
而无需“遍历”我正在搜索的值?预期的输出将是:
[1 2 7]
我发现以前的答案可以找到最接近的值,但不是最接近的值而不超过正在搜索的值。
假设我有以下 2 个向量:
a = [1 3 5 7 8 9 10 15 16];
b = [2 4 14];
有没有我可以使用的函数,以便对于 中的每个元素b
,我可以找到与该元素最接近的值的索引,a
而无需“遍历”我正在搜索的值?预期的输出将是:
[1 2 7]
我发现以前的答案可以找到最接近的值,但不是最接近的值而不超过正在搜索的值。
已编辑:现在使用单线:
[~,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