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

问题描述 投票:0回答:6

我有

data  = [1 1.2 1.3 1.5 1.8]

我想从这一点的数据中找到前后最接近的值,

b = 1.23

我该怎么做?

matlab closest
6个回答
23
投票

这是另一种方法。向量

data
无需排序,并且
b
可以为正值或负值。

[~,I] = min(abs(data-b));
c = data(I);

11
投票

如果数据已排序,您可以使用 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)

5
投票

怎么样

min(abs(data - b))


2
投票

此方法概括了 Doubt 对您正在搜索的

b
中存在多个元素的情况的回答:

ind=knnsearch(data',b)
c=data(ind)

返回

ind
中与
data
中列出的元素最接近的一个或多个元素的索引(或索引数组)
b

请注意,数据被转置,因为要搜索的集合需要是列向量。如果有多个元素那么它也应该是一个列向量。

此外,此方法可以推广为给出第二、第三、第四......最近的邻居(请参阅文档)。

它还推广到数据具有更高维度的情况(如果

d
维度,则
test
b
将具有
d
列)。


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

0
投票
data = [1 1.2 1.3 1.5 1.8]

b = 1.23

find(abs(data-b)==min(abs(data-b)))
© www.soinside.com 2019 - 2024. All rights reserved.