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

Cedric
Cedric 2014년 5월 7일
편집: Cedric 2014년 5월 7일
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?

댓글을 달려면 로그인하십시오.

 채택된 답변

Cedric
Cedric 2014년 5월 7일
편집: Cedric 2014년 5월 7일

1 개 추천

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

MRC
MRC 2014년 5월 7일
What if instead (1,1) I want (0,1)?
Cedric
Cedric 2014년 5월 7일
What is the purpose?

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Azzi Abdelmalek
Azzi Abdelmalek 2014년 5월 7일

0 개 추천

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)

카테고리

도움말 센터File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

질문:

MRC
2014년 5월 7일

댓글:

2014년 5월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by