how to find the index of the row

2 views (last 30 days)
Hi,
I want to get the row number in the following case. Say one has a 5 by 1 vector [1;2;3;4;5].
If I have the scalar '4.5' (which is not in that vector) then I know that 4.5 is between 4 and 5. What I want is to compare 4.5 with all the numbers in the vector. Then Matlab should be able to tell that 4.5 is between 4 and 5. My goal is to get the row number of the scalar '4'.
Consequently, if I have a scalar '3.5' then Matlab should be able to tell that 3.5 is between 3 and 4, and in this case I would like to obtain the row number of the scalar '3'
I just do not know how I could code this in Matlab.
Many thanks

Accepted Answer

James Tursa
James Tursa on 7 Jul 2016
Edited: James Tursa on 7 Jul 2016
If you are looking for the closest value:
x = your vector
s = your scalar
[~,row] = min(abs(x-s));
If you are looking for the first number <= your scalar and x is sorted increasing:
row = find((x-s) >= 0,1);
If something else, please specify.
  3 Comments
James Tursa
James Tursa on 7 Jul 2016
Edited: James Tursa on 7 Jul 2016
Does the posted code ( row and row+1 ) do what you want? Or Azzi's or Andrei's Answers?
Imner Renmi
Imner Renmi on 7 Jul 2016
Edited: Imner Renmi on 7 Jul 2016
Yes, The first code does seem to do what I want. If something strange occurs I'll just post a new question. Thanks a lot for your help.

Sign in to comment.

More Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 7 Jul 2016
Edited: Azzi Abdelmalek on 7 Jul 2016
v=[8;6;1;2;3;7;5;4]
m=3.5
mv=[m ;v]
[ii,jj]=sort(mv)
idx=find(jj==1)
% m is between a1 and a2,
idx1=jj(idx-1)
idx2=jj(idx+1)
a1=mv(idx1)
a2=mv(idx2)

Andrei Bobrov
Andrei Bobrov on 7 Jul 2016
p = [1;2;3;4;5]
z = [3.5,4.5]
[~,out] = histc(z,p)

Tags

Community Treasure Hunt

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

Start Hunting!