Fill NaNs in array with last value

5 vues (au cours des 30 derniers jours)
Leah
Leah le 1 Oct 2013
Modifié(e) : Shruti Verma le 6 Août 2017
Hi all, thanks for your help. I have a double array and I want to fill NaN values with the last value.
Example:
[321 nan() nan() nan() nan() 55 nan() nan() nan() 22 nan() 21 nan() nan()]
desired result
[321 321 321 321 321 55 55 55 55 22 22 21 21 21]
Also I want to do this same thing with a cell array of strings with blanks instead of NaN. I'm trying to avoid ugly for loops here. This seems familiar... maybe it was a cody question I couldn't solve. Thanks again.

Réponse acceptée

Sean de Wolski
Sean de Wolski le 1 Oct 2013
Modifié(e) : Sean de Wolski le 1 Oct 2013
You still have to figure out what to do if the first value is nan.
v = [321 nan() nan() nan() nan() 55 nan() nan() nan() 22 nan() 21 nan() nan()];
idx = (~isnan(v)); %non nans
vr = v(idx); %v non nan
v2 = vr(cumsum(idx)) %use cumsum to build index into vr
  3 commentaires
Image Analyst
Image Analyst le 1 Oct 2013
Clever!
Leah
Leah le 1 Oct 2013
ya wow... impressive. thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

Jan
Jan le 1 Oct 2013
Modifié(e) : Jan le 1 Oct 2013
What's wrong with FOR loops?
data = [321 nan() nan() nan() nan() 55 nan() nan() nan() 22 nan() 21 nan() nan()];
for k = find(isnan(data))
data(k) = data(k - 1);
end
But here a vectorized version:
notNaN = ~isnan(data);
index = find(notNaN);
fillup = zeros(size(data));
fillup(notNaN) = index - [0, diff(index)];
result = data(cumsum(fillup));
Much uglier than the loop. I cannot test this currently. You have to care for initial NaNs in addition. And Sean's solution is nicer.
  2 commentaires
Khaing Zin Htwe
Khaing Zin Htwe le 10 Mai 2016
if true
% data = [321 nan() nan() nan() nan() 55 ;nan() nan() nan() 22 nan() 21; nan() nan() 3 66 5 8];
end
I want to fill with integer zeros to NaN values,sir. How can I do it? please help me.
Shruti Verma
Shruti Verma le 6 Août 2017
Modifié(e) : Shruti Verma le 6 Août 2017
This should do it :)
data(isnan(data)) = 0;

Connectez-vous pour commenter.

Catégories

En savoir plus sur Numeric Types 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