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