Fill NaNs in array with last value

5 Ansichten (letzte 30 Tage)
Leah
Leah am 1 Okt. 2013
Bearbeitet: Shruti Verma am 6 Aug. 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.

Akzeptierte Antwort

Sean de Wolski
Sean de Wolski am 1 Okt. 2013
Bearbeitet: Sean de Wolski am 1 Okt. 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 Kommentare
Image Analyst
Image Analyst am 1 Okt. 2013
Clever!
Leah
Leah am 1 Okt. 2013
ya wow... impressive. thank you!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Jan
Jan am 1 Okt. 2013
Bearbeitet: Jan am 1 Okt. 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 Kommentare
Khaing Zin Htwe
Khaing Zin Htwe am 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 am 6 Aug. 2017
Bearbeitet: Shruti Verma am 6 Aug. 2017
This should do it :)
data(isnan(data)) = 0;

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Numeric Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by