Deleting Rows inbetween NaN values.

5 visualizaciones (últimos 30 días)
Chad
Chad el 14 de Abr. de 2020
Editada: Stephen23 el 23 de Abr. de 2020
I got a row vector that looks like this: V = [ 1 4 5 NaN 0 9 3 1 3 NaN 1 5 3 0 7 NaN 7 4 2 1 NaN 9 4 ]. I want to delete all the columns in between the NaN values, and place the remaining columns in a cell array, it will look like this: Output = { [ 1 4 5 ] [ 1 5 3 0 7 ] [ 9 4 ] }. Not all the vectors in the array will be the same length, so a simple reshape will not work. There are thousands of lines as well. Thank You.
  2 comentarios
Peng Li
Peng Li el 14 de Abr. de 2020
It wasn't quite clear that the [1 5 3 0 7] subset is also in between two NaN values, while you keep it?
Chad
Chad el 14 de Abr. de 2020
Yes, I want every other subset between the NaN values to be kept, starting with the first one, as the cell array Output suggest.

Iniciar sesión para comentar.

Respuestas (2)

Stephen23
Stephen23 el 23 de Abr. de 2020
Editada: Stephen23 el 23 de Abr. de 2020
>> V = [1,4,5,NaN,0,9,3,1,3,NaN,1,5,3,0,7,NaN,7,4,2,1,NaN,9,4];
>> X = isnan(V);
>> Y = cumsum(X);
>> F = @(n) V(~X&(n==Y));
>> C = arrayfun(F, 0:2:max(Y), 'UniformOutput',false);
>> C{:}
ans =
1 4 5
ans =
1 5 3 0 7
ans =
9 4

Vinai Datta Thatiparthi
Vinai Datta Thatiparthi el 23 de Abr. de 2020
Hi Chad,
Understanding the problem from the single example that you mentioned, this following approach was one of the simplest that I could think of -
v = [ 1 4 5 NaN 0 9 3 1 3 NaN 1 5 3 0 7 NaN 7 4 2 1 NaN 9 4 ]; % Input array
idN = isnan(v); % For NaNs in array
idF = find(idN == 1); % Find indices of NaNs
out = {}; % Output cell array
for i = 1:2:numel(idF)
if i == 1
out{end+1} = v(1:idF(1)-1); % For first index
else
out{end+1} = v(idF(i-1)+1:idF(i)-1); % For the rest
end
end
if rem(numel(idF),2) == 0
out{end+1} = v(idF(end)+1:end); % At the end
end
Hope this helps!

Categorías

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

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by