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

4 visualizaciones (últimos 30 días)
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

Respuesta aceptada

Jan
Jan el 22 de Jun. de 2017
Editada: Jan el 22 de Jun. de 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 comentario
Konstantinos Tsitsilonis
Konstantinos Tsitsilonis el 22 de Jun. de 2017
Editada: Konstantinos Tsitsilonis el 22 de Jun. de 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?

Iniciar sesión para comentar.

Más respuestas (1)

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

Categorías

Más información sobre Language Fundamentals en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by