Azzera filtri
Azzera filtri

Select nearest value on a vector for a given value

1 visualizzazione (ultimi 30 giorni)
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.
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
can some one give me an idea please
Thank you

Risposta accettata

Roger Stafford
Roger Stafford il 8 Mar 2018
Modificato: Roger Stafford il 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);

Più risposte (1)

Fangjun Jiang
Fangjun Jiang il 8 Mar 2018
Can you use built-in function?
  2 Commenti
Luis Marcos
Luis Marcos il 10 Mar 2018
Thank you. But i cant understand what does that do.
Fangjun Jiang
Fangjun Jiang il 11 Mar 2018
Your code above can be replaced with just one line.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by