Array manipulation?

19 vues (au cours des 30 derniers jours)
Elin
Elin le 16 Avr 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

Réponse acceptée

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

Plus de réponses (2)

Teja Muppirala
Teja Muppirala le 16 Avr 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 commentaires
Walter Roberson
Walter Roberson le 16 Avr 2011
Why not start the "for" loop at 2 to prevent the possibility of indexing at 0 ?
Teja Muppirala
Teja Muppirala le 16 Avr 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.

Connectez-vous pour commenter.


Andrei Bobrov
Andrei Bobrov le 16 Avr 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))

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by