Asked by VT
on 8 Aug 2013

Dear, Colleagues:

Let's say I have a matrix:

A= [6 6 6 4 4 4 4 4 6 5 5 7 7 7 8 9 8 7 0 0 0 0]

I would like to count number of six and number of zeros (as a group of consequent elements).

And, I would also like to know the distance between groups.

The Matlab output that I would like to get: _____________________________________________________________________________

There are two groups of 6 and one group of 0s.

L= [3 1 4] - length of each group

D= [5 9] - distance between groups

Thank you in advance.

Answer by Andrei Bobrov
on 9 Aug 2013

Edited by Andrei Bobrov
on 9 Aug 2013

Accepted Answer

A= [6 6 6 4 4 4 4 4 6 5 5 7 7 7 8 9 8 7 0 0 0 0];

a = A == 6 | A == 0;

a1 = [0 a(:)' 0];

i1 = strfind(a1,[0 1]);

i2 = strfind(a1,[1 0]);

L = i2 - i1;

D = i1(2:end) - i2(1:end-1);

or

A= [6 6 6 4 4 4 4 4 6 5 5 7 7 7 8 9 8 7 0 0 0 0];

a = [A(:) == 6 | A(:) == 0 ; false];

b = [true;diff(a(:))~=0];

bn = find(b);

idx = bn(cumsum(a(b))>0);

LD = diff(idx);

L = LD(1:2:end);

D = LD(2:2:end);

Sign in to comment.

Answer by Richard Brown
on 8 Aug 2013

Edited by Richard Brown
on 8 Aug 2013

A = [6 6 6 4 4 4 4 4 6 5 5 7 7 7 8 9 8 7 0 0 0 0];

x = diff([find(diff([0 ismember(A, [0 6]) 0]))]);

L = x(1:2:end);

D = x(2:2:end);

Azzi Abdelmalek
on 8 Aug 2013

I copied your, code, maybe before you edited it.

Richard Brown
on 8 Aug 2013

Ah, I thought I'd corrected it fast enough that noone would notice. Sorry about that.

Azzi Abdelmalek
on 9 Aug 2013

I 've made some speed test, Richards code is the fastest

Sign in to comment.

Answer by Azzi Abdelmalek
on 8 Aug 2013

Edited by Azzi Abdelmalek
on 9 Aug 2013

A= [6 6 6 4 4 4 4 4 6 5 5 7 7 7 8 9 8 7 0 0 0 0];

A=num2str(A);

A(A==' ')='';

[a0,a1,group0]=regexp(A,'[06]+','start','end','match');

longueur=a1-a0+1 % length of groups

id=diff(sort([a0 a1 ]))-1 ;

id=id(2:2:end)% distance between groups

group0 % your groups

%or with Richard's idea

idx=1:numel(A)+2;

A=A~=0 & A~=6 ;

id=diff(idx(~~(diff([0 ~A 0]))));

L1=id(1:2:end);

D1=id(2:2:end);

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.