MATLAB如何確定數(shù)據(jù)序列中非零數(shù)據(jù)段的起始和結(jié)束位置

在使用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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容