Counting subrows in each row of a matrix?

1 Ansicht (letzte 30 Tage)
MRC
MRC am 7 Mai 2014
Kommentiert: Cedric am 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 Kommentar
Cedric
Cedric am 7 Mai 2014
Bearbeitet: Cedric am 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?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Cedric
Cedric am 7 Mai 2014
Bearbeitet: Cedric am 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 Kommentare
MRC
MRC am 7 Mai 2014
What if instead (1,1) I want (0,1)?
Cedric
Cedric am 7 Mai 2014
What is the purpose?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Azzi Abdelmalek
Azzi Abdelmalek am 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)

Kategorien

Mehr zu Data Types finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by