How do I find values close to a given value?

我是研究僧i 提交于 2019-11-27 02:12:00

问题


I have data = [1 1.2 1.3 1.5 1.8]

I want to find closest values before and after from data for this point, b = 1.23

How do I do this?


回答1:


Here is another method. The vector data need not be sorted and b can be positive or negative.

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



回答2:


if the data is sorted you can use 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)



回答3:


How about min(abs(data - b))?




回答4:


This method generalizes Doubt's answer to the case where there are multiple elements in b that you are searching for:

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

which returns the index (or array of indices), ind, of the closest element (or elements) in data to the elements listed in b.

Note that data is transposed because the set to be searched in needs to be a column vector. If be had multiple elements then it should also be a column vector.

Also, this method can be generalized to give 2nd, 3rd, 4th ... closest neighbors (see documentation).

It also generalizes to the case when the data is higher dimensional (If d dimensions then test and b would have d columns).




回答5:


This might be a little bit hacky and inefficient, but I use interp1 to find the single closest value as follows:

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



回答6:


data = [1 1.2 1.3 1.5 1.8]

b = 1.23

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


来源:https://stackoverflow.com/questions/8089031/how-do-i-find-values-close-to-a-given-value

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!