Removing NaN values among data
40 views (last 30 days)
Show older comments
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 Comments
Answers (2)
KSSV
on 29 Nov 2017
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 Comments
Akira Agata
on 29 Nov 2017
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
See Also
Categories
Find more on NaNs in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!