0

特定の数を超えるNaN(たとえば、5つのNaN)を持つすべての列を削除したいと思います。ループなしでそれを行う方法はありますか?

4

2 に答える 2

2

ループは必要ありません:

matFixed = MAT( :, sum( isnan( MAT ) ) <= 5);

ステップバイステップ:

nanMat = isnan(MAT); % convert MAT to logical with 1 indicating value is a NAN
nNanInCol = sum(nanMat); %compute the number of NANs in each col
colIdx = nNanInCol <= 5; % determine which columns are "valid"
matFixed = MAT(:, colIdx); % create new matrix using only the good columns of MAT
于 2013-03-02T18:38:18.560 に答える
0

それは超簡単:

%# define a matrix with NaNs
A = rand(10); %# 10x10 array
A(A<0.5) = NaN; %# each column contains on average 5 NaNs

%# count NaNs
nanCt = sum(isnan(A),1);

%# remove columns with too many NaNs
A(:,nanCt > 5) = [];
于 2013-03-02T18:38:08.873 に答える