How to find the index of the closest value to some number in 1D array ?
1.584 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Jose
am 15 Feb. 2023
Bearbeitet: Jose
am 15 Feb. 2023
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
am 17 Mär. 2023
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?
Akzeptierte Antwort
per isakson
am 27 Mär. 2015
Bearbeitet: per isakson
am 2 Apr. 2019
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 Kommentare
Peter Kövesdi
am 2 Apr. 2019
Take care: This routine fails with uint data types. Transform them to double first:
double(x);
or
double(val);
as needed.
Weitere Antworten (3)
Peter Kövesdi
am 1 Apr. 2019
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 Kommentar
Andoni Medina Murua
am 18 Aug. 2022
Bearbeitet: Andoni Medina Murua
am 18 Aug. 2022
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
am 26 Feb. 2021
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 Kommentar
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!