在使用MATLAB進行數(shù)據(jù)處理時,經(jīng)常遇到數(shù)據(jù)不全,在整個數(shù)據(jù)中存在多個不連續(xù)的數(shù)據(jù)段,中間空白位置則為0。在編程處理時,可以采用以下方法確定非零數(shù)據(jù)段的位置:
%假設(shè)有數(shù)據(jù)序列Series,長度為n
%找出數(shù)據(jù)序列中0元素,返回的Sign是一列長度相同的logical數(shù)據(jù)列
%與Series數(shù)據(jù)中0元素位置對應(yīng)的元素為1,非0元素位置則為0
Sign = (Series == 0);
temp = diff(Sign);%計算Sign數(shù)據(jù)列中后一個元素與前一個元素的差,temp長度為n-1
StartPoint = find( temp == -1 ) + 1;%找出非零數(shù)據(jù)段起始位置
EndPoint = find( temp == 1 );%找出非零數(shù)據(jù)段結(jié)束位置
%上面的算法存在一個問題,就是當(dāng)非零數(shù)據(jù)段在Series起始位置開始,或在Series末尾結(jié)束時
%則第一個StartPoint和最后一個EndPoint無法找出,需要額外確定一下
if Series(1)~=0
StartPoint=[1;StartPoint];
end
if Series(end)~=0
EndPoint=[EndPoint;length(Series)];
end