我有data = [1 1.2 1.3 1.5 1.8]我想从该点的数据中找到前后最接近的值,b = 1.23我该怎么做?
data = [1 1.2 1.3 1.5 1.8]
b = 1.23
5lhxktic1#
这里是另一种方法。向量data不需要被排序,并且b可以是正数或负数。
data
b
[~,I] = min(abs(data-b)); c = data(I);
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)
8xiog9wr3#
min(abs(data - b))怎么样?
min(abs(data - b))
lrl1mhuk4#
此方法将Doubt的答案推广到您正在搜索的b中有多个元素的情况:ind=knnsearch(data',b) c=data(ind)它返回data中与b中列出的元素最接近的元素的索引(或索引数组)ind。注意,数据被转置是因为要搜索的集合需要是列向量。如果有多个元素,那么它也应该是一个列向量。这种方法也可以推广到给予第二、第三、第四阶..最接近的邻居(参见文档)。它也适用于高维数据的情况(如果d维,则test和b将具有d列)。
ind=knnsearch(data',b) c=data(ind)
ind
d
test
zysjyyx45#
这可能有点笨拙和低效,但我使用interp1来查找最接近的值,如下所示:
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
wlzqhblo6#
data = [1 1.2 1.3 1.5 1.8] b = 1.23 find(abs(data-b)==min(abs(data-b)))
6条答案
按热度按时间5lhxktic1#
这里是另一种方法。向量
data
不需要被排序,并且b
可以是正数或负数。ia2d9nvy2#
如果数据是排序的,你可以使用find:
8xiog9wr3#
min(abs(data - b))
怎么样?lrl1mhuk4#
此方法将Doubt的答案推广到您正在搜索的
b
中有多个元素的情况:ind=knnsearch(data',b) c=data(ind)
它返回
data
中与b
中列出的元素最接近的元素的索引(或索引数组)ind
。注意,数据被转置是因为要搜索的集合需要是列向量。如果有多个元素,那么它也应该是一个列向量。
这种方法也可以推广到给予第二、第三、第四阶..最接近的邻居(参见文档)。
它也适用于高维数据的情况(如果
d
维,则test
和b
将具有d
列)。zysjyyx45#
这可能有点笨拙和低效,但我使用
interp1
来查找最接近的值,如下所示:wlzqhblo6#