Counting subrows in each row of a matrix?

1 vue (au cours des 30 derniers jours)
MRC
MRC le 7 Mai 2014
Commenté : Cedric le 7 Mai 2014
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)

Azzi Abdelmalek
Azzi Abdelmalek le 7 Mai 2014
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 Resizing and Reshaping Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by