[英]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.