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!