How to find the index of the closest value to some number in 1D array ?
942 ビュー (過去 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
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
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));
1 件のコメント
参考
カテゴリ
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!