Removing NaN values among data
40 次查看(过去 30 天)
显示 更早的评论
I have a matrix like this (this is an example matrix)
A = [NaN NaN NaN NaN NaN; NaN NaN NaN NaN NaN; NaN 3 4 6 NaN; NaN 4 NaN 8 NaN; NaN 7 8 9 NaN; NaN NaN NaN NaN NaN]
I want to remove the middle nan value and replace it by value in respect to surrounding value, (I wish a resultant matrix like below;
A = [NaN NaN NaN NaN NaN; NaN NaN NaN NaN NaN; NaN 3 4 6 NaN; NaN 4 6 8 NaN; NaN 7 8 9 NaN; NaN NaN NaN NaN NaN]
Is it possible to be done in matlab?
Thanks in advance!
0 个评论
回答(2 个)
KSSV
2017-11-29
A = [NaN NaN NaN NaN NaN; NaN NaN NaN NaN NaN; NaN 3 4 6 NaN; NaN 4 NaN 8 NaN; NaN 7 8 9 NaN; NaN NaN NaN NaN NaN]
% B = [NaN NaN NaN NaN NaN; NaN NaN NaN NaN NaN; NaN 3 4 6 NaN; NaN 4 6 8 NaN; NaN 7 8 9 NaN; NaN NaN NaN NaN NaN]
[m,n] = size(A) ;
C = A ;
for i = 2:m-1
for j = 2:n-1
if isnan(A(i,j))
C(i,j) = 1/2*(A(i-1,j)+A(i+1,j)) ;
end
end
end
0 个评论
Akira Agata
2017-11-29
Another possible solution:
A = [NaN NaN NaN NaN NaN;...
NaN NaN NaN NaN NaN;...
NaN 3 4 6 NaN;...
NaN 4 NaN 8 NaN;...
NaN 7 8 9 NaN;...
NaN NaN NaN NaN NaN];
B1 = fillmissing(A,'movmean',3,1);
B2 = fillmissing(A,'movmean',3,2);
idx = isnan(B1) | isnan(B2);
B = B1;
B(idx) = NaN;
The output is:
>> B
B =
NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN
NaN 3 4 6 NaN
NaN 4 6 8 NaN
NaN 7 8 9 NaN
NaN NaN NaN NaN NaN
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 NaNs 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!