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

En savoir plus sur Matrices and Arrays dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by