How to find the index of the closest value to some number in 1D array ?

1,126 次查看(过去 30 天)
How to find the index in 1D array that has closest value to some number ?
val =-1.03
val1 = 1.04
x = -10:0.009:10
ind1 = find (A==val) % will work if the val is exact match
  2 个评论
Jose
Jose 2023-2-15
编辑:Jose 2023-2-15
Index=find(min(abs(Array-target))==abs(Array-target))
that should work even if the # of sig digits change in your array. It finds the location of value in the array, that when substracted from your target value has the smallest difference (i.e. closest match).
Din N
Din N 2023-3-17
This does give the closest value, but if you want the closest value to be smaller than your target value? For example if my target value is 7300, how can I specify here that I only want the index for the closest value that is smaller than 7300?

请先登录,再进行评论。

采纳的回答

per isakson
per isakson 2015-3-27
编辑:per isakson 2019-4-2
Hint:
>> [ d, ix ] = min( abs( x-val ) );
>> x(ix-1:ix+1)
ans =
-1.0360 -1.0270 -1.0180
ix is the "index in 1D array that has closest value to" val
"if the val is exact match"   that's tricky with floating point numbers

更多回答(3 个)

Peter Kövesdi
Peter Kövesdi 2019-4-1
ind = interp1(x,1:length(x),val,'nearest');
also does it.
But a short comparison shows disadvantages in timing:
f1=@()interp1(x,1:length(x),val,'nearest');
f2=@()min( abs( x-val ) );
timeit(f1)>timeit(f2)
  1 个评论
Andoni Medina Murua
编辑:Andoni Medina Murua 2022-8-18
However
interp1(x,1:length(x),val,'nearest');
works in case val is an array, which doesn't happen with
min( abs( x-val ) );

请先登录,再进行评论。


Revant Adlakha
Revant Adlakha 2021-2-26
You could also use something like this, where f(x) is the function and x is the value of interest.
ind = find(min(abs(f(x) - x)) == abs(f(x) - x));

Ernest Nachaki
Ernest Nachaki 2022-5-27
Try this
index = fix(interp1(array,find(array),value));

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by