簡體   English   中英

MATLAB:大於N的組的二進制數組計數

[英]MATLAB: binary array count of groups longer than N

我有一個二進制數組,表示視頻各個幀的對象檢測。 我試圖從此向量確定有多少個單獨的事件。 我需要找出一種方法來計算二進制數組中1的簇數。

用Matlab函數確定有多少個連續的1個單獨的組大於說的N=5的最簡單方法是什么?

例如,對於數組: 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 1 0 0 1我希望輸出為2 ,因為有2組1比N

我需要一種有效的方法來執行此操作,而不僅僅是循環播放,因為我必須在大約2萬個短視頻中運行此操作。 有點希望我為此錯過了一個內置函數,但是歡迎任何解決方案。

我試圖加速的這段丑陋的代碼看起來像這樣:

    % Count Events
    EventCount = 0;
    subcount = 0;
    N = 5;
    for e=1:length(events) % events is a binary array
        if (events(e) == 1) && (subcount == 0)
            subcount = 1;
        elseif events(e) == 1 
            subcount = subcount + 1;
        elseif (events(e) == 0) && (subcount > N)
            EventCount = EventCount + 1;
            subcount = 0;
        elseif (events(e) == 0) && (subcount <= N)
            subcount = 0;
        else
            disp('Oops, should not get here!');                  
        end
    end
    disp(EventCount);

一個線性解決方案:

sum(accumarray(1+cumsum([0 diff( events)==1].'),events.')>N)

計算1s塊的起始索引:

idx = diff(events.')==1;

為每個組分配一個類別號:

catnum=1+cumsum([0 idx].');

計算每個類別中的1

count = accumarray(catnum,events);

計算多少個1的組長於N

sum(count>N)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM