我有data = [1 1.2 1.3 1.5 1.8]
我想从这一点的数据中找到最接近的值,b = 1.23
我该怎么做呢?
这是另一种方法。向量data
不需要排序,b
可以是正数或负数。
[~,I] = min(abs(data-b));
c = data(I);
如果数据已排序,您可以使用 find:
i_lower = find(data <= b,1,'last');
i_higher = find(data >= b,1,'first');
lower_than_b = data(i_lower)
higher_than_b = data(i_higher)
怎么样min(abs(data - b))
?
b
此方法概括了 Doubt 对您正在搜索的多个元素的情况的回答:
ind=knnsearch(data',b)
c=data(ind)
它返回与 中列出的元素ind
最近的一个(或多个元素)的索引(或索引数组)。data
b
请注意,数据是转置的,因为要搜索的集合需要是列向量。如果有多个元素,那么它也应该是一个列向量。
此外,这种方法可以推广到给出第 2、第 3、第 4 ......最近的邻居(参见文档)。
它还推广到数据更高维度的情况(如果d
维度那么test
并且b
会有d
列)。
这可能有点笨拙且效率低下,但我interp1
用来查找单个最接近的值,如下所示:
nearestTo = @(x, xq) interp1(x, x, xq, 'nearest');
nearestTo([2 4 6 8 10], [pi 2*pi 3*pi]) % 4 6 10
nearestTo(sort([2 7 11 3 5]), abs(-3.5)) % 3
data = [1 1.2 1.3 1.5 1.8]
b = 1.23
find(abs(data-b)==min(abs(data-b)))