MATLAB에서 NaN을 제거하려면 어떻게 해야 합니까?
문제
사용할 때 NaN으로 나타나는 빈 셀이 많은 파일이 있습니다. cell2mat
, 하지만 문제는 평균값을 구해야 할 때 NaN에 오류가 표시되므로 이 작업을 수행할 수 없다는 것입니다.Excel에서는 NaN 값을 간과하는데 MATLAB에서도 동일한 작업을 수행하려면 어떻게 해야 합니까?
또한 다음을 사용하여 파일을 작성하고 있습니다. xlswrite
:
xlswrite('test.xls',M);
1을 제외한 모든 행에 데이터가 있습니다.어떻게 작성합니까?
M(1,:) = ('time', 'count', 'length', 'width')
즉, 나는 원한다 M(1,1)='time'
, M(1,2)='count'
, 등등.나한테서 데이터가 있어 M(2,1)
에게 M(10,20)
.어떻게 해야 하나요?
해결책
모든 NaN과 무한대를 제거하려면 'isfinite' 함수를 사용하세요.
A=A(무한(A))
%컬럼 헤더를 포함하는 셀 배열을 만듭니다. 열 헤드러 = { '열 1', '열 2', '열 3', '열 4', '열 5', ''};
%컬럼 헤더를 먼저 쓰기 먼저 XLSWRITE ( 'myFile1.xls', columnheader);
% 컬럼 헤더 바로 아래에 데이터를 XLSWRITE ( 'newfile.xls', M, 'Sheet1', 'A2');
다른 팁
AP가 정확하게 지적한 것처럼, 함수를 사용할 수 있습니다 isfinite
매트릭스에서 유한 한 값 만 찾고 유지합니다. 기능을 사용할 수도 있습니다 isnan
. 그러나 매트릭스에서 값을 제거하면 행렬을 행 또는 열 벡터로 재구성하는 의도하지 않은 결과가 발생할 수 있습니다.
>> mat = [1 2 3; 4 NaN 6; 7 8 9] % A sample 3-by-3 matrix
mat =
1 2 3
4 NaN 6
7 8 9
>> mat = mat(~isnan(mat)) % Removing the NaN gives you an 8-by-1 vector
mat =
1
4
7
2
8
3
6
9
또 다른 대안은 다음과 같은 기능을 사용하는 것입니다 통계 도구 상자 (액세스 할 수있는 경우). NAN 값을 포함하는 행렬을 처리합니다. 평균 복용을 언급하기 때문에 체크 아웃 할 수 있습니다. nanmean
:
>> mat = [1 2 3; 4 NaN 6; 7 8 9];
>> nanmean(mat)
ans =
4 5 6 % The column means computed by ignoring NaN values
편집하다: 사용에 대한 추가 질문에 답변합니다 xlswrite
,이 샘플 코드는 데이터를 작성할 수있는 한 가지 방법을 설명해야합니다.
C = {'time','count','length','width'}; % A cell array of strings
M = rand(10,20); % A 10-by-20 array of random values
xlswrite('test.xls',C); % Writes C to cells A1 through D1
xlswrite('test.xls',M,'A2:T11'); % Writes M to cells A2 through T11
통계 도구 상자에는 NAN 값을 다루기위한 몇 가지 통계 기능이 있습니다. Nanmean, Nanmedian, Nanstd, Nanmin, Nanmax 등을 참조하십시오.
NAN을 SO와 같은 임의의 숫자로 설정할 수 있습니다.
mat(isnan(mat))=7 // my lucky number of choice.
너무 늦을 수도 있지만 ...
x = [1 2 3; 4 inf 6; 7 -inf NaN];
x(find(x == inf)) = 0; //for inf
x(find(x == -inf)) = 0; //for -inf
x(find(isnan(x))) = 0; //for NaN