How to find the index of the closest value to some number in 1D array ?
1,224 次查看(过去 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 个评论
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
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
2 个评论
Peter Kövesdi
2019-4-2
Take care: This routine fails with uint data types. Transform them to double first:
double(x);
or
double(val);
as needed.
更多回答(3 个)
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
2022-8-18
编辑: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
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));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!