22

我有data = [1 1.2 1.3 1.5 1.8]

我想从这一点的数据中找到最接近的值,b = 1.23

我该怎么做呢?

4

6 回答 6

23

这是另一种方法。向量data不需要排序,b可以是正数或负数。

[~,I] = min(abs(data-b));
c = data(I);
于 2013-06-06T15:01:46.473 回答
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)
于 2011-11-11T09:55:41.570 回答
5

怎么样min(abs(data - b))

于 2011-11-11T02:39:58.473 回答
2

b此方法概括了 Doubt 对您正在搜索的多个元素的情况的回答:

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

它返回与 中列出的元素ind最近的一个(或多个元素)的索引(或索引数组)。datab

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

此外,这种方法可以推广到给出第 2、第 3、第 4 ......最近的邻居(参见文档)。

它还推广到数据更高维度的情况(如果d维度那么test并且b会有d列)。

于 2017-08-07T19:34:12.360 回答
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
于 2018-11-27T01:55:35.237 回答
0
data = [1 1.2 1.3 1.5 1.8]

b = 1.23

find(abs(data-b)==min(abs(data-b)))
于 2014-11-27T14:53:38.540 回答