我有data = [1 1.2 1.3 1.5 1.8]
我想在此点的数据{@ 1}}
之前和之后找到最接近的值我该怎么做?
答案 0 :(得分:23)
这是另一种方法。无需对矢量data
进行排序,b
可以是正数或负数。
[~,I] = min(abs(data-b));
c = data(I);
答案 1 :(得分:10)
如果数据已排序,您可以使用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)
答案 2 :(得分:4)
min(abs(data - b))
怎么样?
答案 3 :(得分:2)
此方法概括了对您正在搜索的b
中有多个元素的情况的疑问:
ind=knnsearch(data',b)
c=data(ind)
将ind
中最接近的元素(或多个元素)的索引(或索引数组)data
返回给b
中列出的元素。
请注意,数据是转置的,因为要搜索的集合需要是列向量。如果有多个元素,那么它也应该是一个列向量。
此外,这个方法可以推广给第2,第3,第4 ......最近邻居(见文件)。
它还推广了数据具有更高维度的情况(如果d
维度,那么test
和b
将有d
列。
答案 4 :(得分:1)
这可能有点笨拙且效率低下,但是我使用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
答案 5 :(得分:0)
data = [1 1.2 1.3 1.5 1.8]
b = 1.23
find(abs(data-b)==min(abs(data-b)))