2013-07-10 5 views
1

아래의 루프를 사용하여 데이터가 기록 된 인스턴스와 데이터가 기록되지 않은 인스턴스를 분리합니다. 데이터 세트는 매우 커서 (열에 따라 1000-6000까지 다양 함) 혼합 된 데이터 유형이 있으므로 실제로 사용할 수있는 유일한 해결책은 루프를 사용하는 것입니다.if 문을 실행하는 동안 Matlab이 빈 셀을 읽지 않는 이유는 무엇입니까?

공백을 정확하게 읽으려면 if 또는 while 문을 사용할 수 없습니다. for 루프를 사용하면 오류없이 실행되지만, 데이터를 분리하지 않고 복사를 끝내는 if-means의 처음 절반에는 절대로 들어 가지 않습니다. 데이터의 크기가 다양하기 때문에 for 루프가 바람직하지 않습니다.

while (isempty(andover_all{j,1})==1) 
    if andover_all{h,33}==''; 
     current_data{k,4}= formated_date{j}; 
     k=k+1; 
    else 
    current_data{i,1}=formated_date{j}; 
    current_data{i,2}=andover_data{33}(j); 
    i=i+1; 
end 
h=h+1; 
end 

Andover_all은 문자열 배열이며, current_data 및 andover_data는 혼합 데이터 유형을 갖는 셀 배열입니다. 내가 isempty, [], cellfun (@ isempty, andover_data)을 사용하고, 셀 요소를 비교할 수있게 해주는 함수 eq.m을 사용해 보았다. 또한 데이터에서 빈 셀을 제거하지 않고 그냥 건너 뜁니다.

당신이 어떤 아이디어

답변

2

빈 상자가 실제로 익숙해 뭔가있는이 있으면 알려 주시기 바랍니다. 마치 inf 또는 NaN과 같은 작업입니다. NaN==NaN 또는 1/0==inf과 같은 것이 반환되어야합니까? 이 사람들에게는 특별한 규칙이 있습니다. 간단한 것들이지만, 당신은 그것들을 알 필요가 있습니다. 부담이 적은이 사람들에 대한 모든 특별 규칙을 만들려면 더 직관적이고 더 읽기, MATLAB 특별한 그들을위한 기능이 있습니다 isinf (inf을 감지하기 위해), isnan 비수 (NaN을 감지) 및 isfinite을 (을 감지하는 중inf 또는 NaN).

빈은 또한 특별한 행동과 익숙해 져야하는 특별한 규칙을 가지고 있습니다. 그것에 대해 생각하면 결국 의미가 있습니다. []==[]은 무엇을 반환해야합니까? 또는 1==''?

물론 비어 있습니다. []==false이 비어 있더라도 if으로 평가하면 []false입니다. 알았어? :)

불행하게도, 특정 유형의 빈 병을 검출 isinf 또는 isnan의 상응이 없다 (가없는isemptycell 또는 isemptychar 등) (isempty이다) 빈 병을위한 isfinite의 당량있다 인 이는 '', {} 또는 [] 중 하나를 포착합니다.

하지만 때로는 특정 빈에 대한 검사를하는 것이 바람직합니다. 용기는 클래스을 보존합니다. 즉, {}은 실제로 셀이며 []은 실제로 double의 배열입니다.

따라서, 빈 셀을 감지 :

>> a = {}; 
>> iscell(a) && isempty(a) 
ans = 
    1 

은 빈 문자열 감지 :

>> a = ''; 
>> ischar(a) && isempty(a) 
ans = 
    1 

를 빈 배열 감지 :

>> a = []; 
>> isnumeric(a) && isempty(a) 
ans = 
    1