Azzera filtri
Azzera filtri

Counting subrows in each row of a matrix?

3 visualizzazioni (ultimi 30 giorni)
MRC
MRC il 7 Mag 2014
Commentato: Cedric il 7 Mag 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 Commento
Cedric
Cedric il 7 Mag 2014
Modificato: Cedric il 7 Mag 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?

Accedi per commentare.

Risposta accettata

Cedric
Cedric il 7 Mag 2014
Modificato: Cedric il 7 Mag 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 Commenti
MRC
MRC il 7 Mag 2014
What if instead (1,1) I want (0,1)?
Cedric
Cedric il 7 Mag 2014
What is the purpose?

Accedi per commentare.

Più risposte (1)

Azzi Abdelmalek
Azzi Abdelmalek il 7 Mag 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)

Categorie

Scopri di più su Data Types in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by