Remove NaN from a matrix

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 日

2 投票

ind=sum(~isnan(B));
B(isnan(B))=0;
mean=sum(B)./ind
James Tursa
James Tursa 2014 年 6 月 3 日

2 投票

If you have the appropriate toolbox, you can use the function: nanmean
dpb
dpb 2014 年 6 月 3 日

2 投票

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 日

1 投票

You might want to take a look at John D'Errico's inpaint_nans: http://www.mathworks.com/matlabcentral/fileexchange/4551-inpaint-nans

カテゴリ

ヘルプ センター および File ExchangeCell Arrays についてさらに検索

質問済み:

2014 年 6 月 3 日

コメント済み:

2014 年 6 月 4 日

Community Treasure Hunt

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

Start Hunting!

Translated by