Array manipulation?

16 visualizzazioni (ultimi 30 giorni)
Elin
Elin il 16 Apr 2011
Hi,
I'm looking for a piece of code that will replace NaN values in an array with the value immidiatly on top of the NaN value, I have paste an example below where I have replaced the values one by one, but that can hardly be the best way. would appreciate any assistance.
PPP =
2002
NaN
NaN
2008
2010
2012
NaN
2016
2018
2020
PP =
2002
2002
2002
2008
2010
2012
2012
2016
2018
2020

Risposta accettata

Walter Roberson
Walter Roberson il 16 Apr 2011
while true
K = find(isnan(PP),1,'first');
if isempty(K); break; end
PP(K) = PP(K-1);
end

Più risposte (2)

Teja Muppirala
Teja Muppirala il 16 Apr 2011
This should be simple enough. Obviously the first element can't be a nan though.
PP = PPP;
for n = 1:numel(PP)
if isnan(PP(n))
PP(n) = PP(n-1);
end
end
  2 Commenti
Walter Roberson
Walter Roberson il 16 Apr 2011
Why not start the "for" loop at 2 to prevent the possibility of indexing at 0 ?
Teja Muppirala
Teja Muppirala il 16 Apr 2011
Yeah, that's a good point. My thinking was that you'd probably want to have an error there if you did in fact accidentally have a nan at the beginning.

Accedi per commentare.


Andrei Bobrov
Andrei Bobrov il 16 Apr 2011
fd1 = find(isnan(PPP))
PPP(fd1) = 0;
a = unique([fd1;fd1-1])
p = PPP(a);
PPP(a)=cell2mat(cellfun(@(x)cumsum(x),mat2cell(p,diff(find([p;1])),1),'UniformOutput', false))

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by