필터 지우기
필터 지우기

Remove NaN from a matrix

조회 수: 19 (최근 30일)
Damith
Damith 2014년 6월 3일
댓글: Damith 2014년 6월 4일
Hi,
I have matrix B = (366 x 39) and has NaN values in every column. How can I remove NaN and obtain the mean of every column. The resulting matrix C should be a 1 x 39 matrix.
Thanks in advance.

답변 (4개)

George Papazafeiropoulos
George Papazafeiropoulos 2014년 6월 3일
편집: George Papazafeiropoulos 2014년 6월 3일
ind=sum(~isnan(B));
B(isnan(B))=0;
mean=sum(B)./ind

James Tursa
James Tursa 2014년 6월 3일
If you have the appropriate toolbox, you can use the function: nanmean

dpb
dpb 2014년 6월 3일
If have the Stats Toolbox, then just nanmean
If don't, it's more of a pain; unless the NaN are consistent in number per column you'll end up w/ a "jagged" array which isn't allowed in an array. Hence you'll need to accumulate by column--the "deadahead" solution is a loop and for small matrices of this order it'll undoubtedly be "fast enough"...
nc=size(B,2); % number columns in B
m=zeros(1,nc); % preallocate for the means vector
for i=1:nc
m(i)=mean(isfinite(B(:,i))); % compute mean of values less NaN's and Inf's
end
You can use accumarray for this w/o the loop...seed doc's for details

Image Analyst
Image Analyst 2014년 6월 3일
You might want to take a look at John D'Errico's inpaint_nans: http://www.mathworks.com/matlabcentral/fileexchange/4551-inpaint-nans

카테고리

Help CenterFile Exchange에서 Correlation and Convolution에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by