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

nwlqm0z1  于 8个月前  发布在  Matlab
关注(0)|答案(6)|浏览(195)

我有data = [1 1.2 1.3 1.5 1.8]
我想从该点的数据中找到前后最接近的值,b = 1.23
我该怎么做?

5lhxktic

5lhxktic1#

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

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

ia2d9nvy2#

如果数据是排序的,你可以使用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)
8xiog9wr

8xiog9wr3#

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

lrl1mhuk

lrl1mhuk4#

此方法将Doubt的答案推广到您正在搜索的b中有多个元素的情况:
ind=knnsearch(data',b) c=data(ind)
它返回data中与b中列出的元素最接近的元素的索引(或索引数组)ind
注意,数据被转置是因为要搜索的集合需要是列向量。如果有多个元素,那么它也应该是一个列向量。
这种方法也可以推广到给予第二、第三、第四阶..最接近的邻居(参见文档)。
它也适用于高维数据的情况(如果d维,则testb将具有d列)。

zysjyyx4

zysjyyx45#

这可能有点笨拙和低效,但我使用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
wlzqhblo

wlzqhblo6#

data = [1 1.2 1.3 1.5 1.8]

b = 1.23

find(abs(data-b)==min(abs(data-b)))

相关问题