Select nearest value on a vector for a given value
3 views (last 30 days)
Show older comments
Luis Marcos
on 8 Mar 2018
Commented: Fangjun Jiang
on 11 Mar 2018
Hi.
I would like to know if you can help me.
I have to get the vector index where its value is closer o nearest to a given value, for example.
i have this vector.
0 1 2 3 4 5 6 7 index
Value -172.0000 | -130.8750 | -89.7500 | -48.6250 | -7.5000 | 33.6250 | 74.7500 | 115.8750 | 157.0000
and if i want to look for the -8, it want to get the index 3 because -8 is between .-48.625 and -7.5, and so on, if i looking for 157, i should get the index 7
i have this code by far, but it isnt working the way i want.
MEQ=[fil,col];
for i=1 :fil%i will store the index in a matrix, so i have to loop over rows
for j=1 :col%loop over matrix columns
for w=1 :numel(recta)%this is the vector
[c,indice]=min(abs(recta-E(i,j)));%here i get the index
MEQ(i,j)=indice;%change the current vector value for the index
end
end
end
can some one give me an idea please
Thank you
0 Comments
Accepted Answer
Roger Stafford
on 8 Mar 2018
Edited: Roger Stafford
on 8 Mar 2018
I notice that your vector 'Value' has ascending elements. If we can assume that, the following can be used:
s = -8; % Or whatever value is being sought
index = sum(Value<s)-1;
Note that this will give a -1 result if s is smaller than all the elements of 'Value' or an 8 index if it is greater than all of 'Value'. If you want to prevent these two possibilities, do this afterwards:
index = min(max(index,0),length(Value)-2);
More Answers (1)
Fangjun Jiang
on 8 Mar 2018
Can you use built-in function?
X=10:10:100;
Y=1:10;
out=interp1(X,Y,12,'nearest')
out=interp1(X,Y,18,'nearest')
2 Comments
Fangjun Jiang
on 11 Mar 2018
Your code above can be replaced with just one line.
MEQ=interp1(recta,(1:length(recta))-2,E,'nearest')
See Also
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!