Info

此问题已关闭。 请重新打开它进行编辑或回答。

consecutive rows to define an event

1 次查看(过去 30 天)
Vanessa
Vanessa 2017-5-15
关闭: MATLAB Answer Bot 2021-8-20
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

回答(1 个)

Andrei Bobrov
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 个评论
Vanessa
Vanessa 2017-5-16
It worked!!Thank you very much for your help!!!

此问题已关闭。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by