Counting subrows in each row of a matrix?

Hi all, I need an algorithm which counts how many adjacent and non-overlapping (1,1) I have in each row of a matrix A mx(n*2) without using loops. E.g.
A=[1 1 1 0 1 1 0 0 0 1; 1 0 1 1 1 1 0 0 1 1] %m=2, n=5
Then I want
B=[2;3] %mx1
In fact A=[(1 1) (1 0) (1 1) (0 0) (0 1); (1 0) (1 1) (1 1) (0 0) (1 1)]. Then, according to this separation, I have 2 (1 1) in the first row and 3 (1 1) in the second row.

1 commentaire

Cedric
Cedric le 7 Mai 2014
Modifié(e) : Cedric le 7 Mai 2014
And if one row was
0 1 1 0 0 0
would you count this as
(0 1) (1 0) ..
or still spot the 1 1 block?

Connectez-vous pour commenter.

 Réponse acceptée

Cedric
Cedric le 7 Mai 2014
Modifié(e) : Cedric le 7 Mai 2014
Assuming that n is defined previously as
>> n = 5 ;
(for the case of your example) here is a one liner
>> B = sum( reshape( all( reshape( A.', 2, [] )), n, [] )).'
B =
2
3

2 commentaires

MRC
MRC le 7 Mai 2014
What if instead (1,1) I want (0,1)?
Cedric
Cedric le 7 Mai 2014
What is the purpose?

Connectez-vous pour commenter.

Plus de réponses (1)

I think you need to use at least one loop
A=[1 1 1 0 1 1 0 0 0 1; 1 0 1 1 1 1 0 0 1 1]
for k=1:size(A,1)
a=[0 A(k,:) 0];
ii=strfind(a,[1 0])-strfind(a,[0 1]);
jj=mod(ii,2)~=0;
ii(jj)=ii(jj)-1;
out(k)=sum(ii)/2;
end
disp(out)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by