Removing NaN values among data

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!

Answers (2)

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
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

1 Comment

Note that fillmissing is introduced in R2016b.

Sign in to comment.

Asked:

on 29 Nov 2017

Commented:

on 29 Nov 2017

Community Treasure Hunt

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

Start Hunting!