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

4 vues (au cours des 30 derniers jours)
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

Réponse acceptée

Jan
Jan le 22 Juin 2017
Modifié(e) : Jan le 22 Juin 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 commentaire
Konstantinos Tsitsilonis
Konstantinos Tsitsilonis le 22 Juin 2017
Modifié(e) : Konstantinos Tsitsilonis le 22 Juin 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?

Connectez-vous pour commenter.

Plus de réponses (1)

James Tursa
James Tursa le 22 Juin 2017
Modifié(e) : James Tursa le 22 Juin 2017
E.g.,
x = find(isnan(vec))+1;
x = x(x<=numel(vec)); % or x(x>numel(vec)) = [];
result = vec(x);

Catégories

En savoir plus sur Language Fundamentals dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by