Find all numeric values right after the NaN values in a column vector

2 views (last 30 days)
Good evening,
I have a column vector such that
vec = [1 ; 2 ; 3 ; 4 ; Nan ; 5 ; 6 ; 7 ; 8 ; Nan ; 9 ; 10 ; 11 ; 12 ; Nan];
I would like to find extract the elements of the vector ''vec'' that are located right after the NaN, such that I would get a new vector:
new_vec=[5;9]
It is very easy to find the indices of all the NaN elements, however I don't know how to 'shift' those indices a place further to locate the values right after the NaN.
Thanks for your help in advance,
KMT

Accepted Answer

Jan
Jan on 22 Jun 2017
Edited: Jan on 22 Jun 2017
index = isnan(vec);
result = vec([false; index(1:end-1)]);
Or in one line:
result = vec([false; isnan(vec(1:end-1))]);
This is "logical indexing" and "shifting" is simply to insert a FALSE at the beginning.
  1 Comment
Konstantinos Tsitsilonis
Konstantinos Tsitsilonis on 22 Jun 2017
Edited: Konstantinos Tsitsilonis on 22 Jun 2017
Thanks for your answer it works perfectly, however I seemed to have run into another problem. In case my vector is
vec = [1 ; 2 ; 3 ; 4 ; nan ;nan;nan; 5 ; 6 ; 7 ; 8 ; nan ; 9 ; 10 ; 11 ; 12 ; nan]
Then this solution does not work. How could I generalise this for any number of consecutive ''nan'' at any point in the vector?

Sign in to comment.

More Answers (1)

James Tursa
James Tursa on 22 Jun 2017
Edited: James Tursa on 22 Jun 2017
E.g.,
x = find(isnan(vec))+1;
x = x(x<=numel(vec)); % or x(x>numel(vec)) = [];
result = vec(x);

Categories

Find more on Language Fundamentals 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!