count groups of elements and distances between them

4 ビュー (過去 30 日間)
VT
VT 2013 年 8 月 8 日
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.

採用された回答

Andrei Bobrov
Andrei Bobrov 2013 年 8 月 9 日
編集済み: Andrei Bobrov 2013 年 8 月 9 日
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);

その他の回答 (3 件)

Richard Brown
Richard Brown 2013 年 8 月 8 日
編集済み: Richard Brown 2013 年 8 月 8 日
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);
  7 件のコメント
Richard Brown
Richard Brown 2013 年 8 月 8 日
Ah, I thought I'd corrected it fast enough that noone would notice. Sorry about that.
Azzi Abdelmalek
Azzi Abdelmalek 2013 年 8 月 9 日
I 've made some speed test, Richards code is the fastest

サインインしてコメントする。


Azzi Abdelmalek
Azzi Abdelmalek 2013 年 8 月 8 日
編集済み: Azzi Abdelmalek 2013 年 8 月 9 日
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);

VT
VT 2013 年 8 月 9 日
Colleagues. Thank you for the fast response. Especially, I like the simplicity of codes without a need to create loops.

カテゴリ

Help Center および File ExchangeFinancial Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by