Array manipulation?
22 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
采纳的回答
Walter Roberson
2011-4-16
while true
K = find(isnan(PP),1,'first');
if isempty(K); break; end
PP(K) = PP(K-1);
end
0 个评论
更多回答(2 个)
Teja Muppirala
2011-4-16
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 个评论
Walter Roberson
2011-4-16
Why not start the "for" loop at 2 to prevent the possibility of indexing at 0 ?
Teja Muppirala
2011-4-16
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.
Andrei Bobrov
2011-4-16
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))
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!