Info
此问题已关闭。 请重新打开它进行编辑或回答。
consecutive rows to define an event
2 次查看(过去 30 天)
显示 更早的评论
Hello everyone, I have a dataset array in which the first column contains the number of each row of the array and the second column is a parameter (0 or 1). I want to find consecutive rows(4 and more) with 1 in the second column and create seperate matrixes with these arrays. I would appreciate any help.
Thanks, Vanessa
0 个评论
回答(1 个)
Andrei Bobrov
2017-5-15
编辑:Andrei Bobrov
2017-5-15
Let A - your dataset with size [N x 2]
Using Image Processing Toolbox
1.
S = regionprops(cumsum(diff([0;A(:,2)]) == 1).*A(:,2) ,'Area','PixelIdxList');
out = cellfun(@(x)A(x,:),{S([S.Area] >= 4).PixelIdxList},'un',0)
2.
i0 = bwareaopen(A(:,2),4);
i1 = bwlabel(i0);
i2 = (1:size(A,1))';
out = accumarray(i1(i0),i2(i0),[],@(x){A(x,:)})
other way without Image Processing Toolbox
1.
ii = cumsum(diff([0;A(:,2)]) == 1).*A(:,2);
t = A(:,2)~=0;
i1 = accumarray(ii(t),1);
i2 = i1>=4;
A1 = A(t,:);
out = mat2cell(A1(ismember(ii(t),find(i2)),:),i1(i2),size(A,2));
2.
ii = cumsum(diff([0;A(:,2)]) == 1).*A(:,2);
C = accumarray(ii+1,(1:size(A,1))',[],@(x){A(x,:)});
C = C(2:end);
out = C(cellfun('size',C,1) >= 4);
1 个评论
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!