如何找到接近给定值的值?

时间:2011-11-11 02:35:24

标签: matlab closest

我有data = [1 1.2 1.3 1.5 1.8]

我想在此点的数据{@ 1}}

之前和之后找到最接近的值

我该怎么做?

6 个答案:

答案 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维度,那么testb将有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)))