# Fill NaNs in array with last value

5 vues (au cours des 30 derniers jours)
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.
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

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 commentairesAfficher 1 commentaire plus ancienMasquer 1 commentaire plus ancien
Image Analyst le 1 Oct 2013
Clever!
Leah le 1 Oct 2013
ya wow... impressive. thank you!

Connectez-vous pour commenter.

### Plus de réponses (1)

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 commentairesAfficher AucuneMasquer Aucune
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 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 NaNs 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