How can I count the followed occurrences of each element in a vector in MATLAB?

1 view (last 30 days)
Hi, I want to count the number of followed occurrences of each element in a vector.
So if my input is
x = [1 1 1 2 2 1 1 2 5 5]
I need an output
y = [1 2 1 2 5;3 2 2 1 2] How do I do this?

Accepted Answer

Stephen23
Stephen23 on 30 Nov 2015
Edited: Stephen23 on 30 Nov 2015
Judicious use of diff solves this easily:
x = [1 1 1 2 2 1 1 2 5 5];
f = [find(diff(x)),numel(x)];
y(2,:) = [f(1),diff(f)];
y(1,:) = x(f);
which generates this output:
>> y =
1 2 1 2 5
3 2 2 1 2
  4 Comments
Stephen23
Stephen23 on 30 Nov 2015
Edited: Stephen23 on 30 Nov 2015
If you have a newer MATLAB version, you can use repelem, which provides exactly this functionality:
repelem(A(1,:),A(2,:))
Otherwise use arrayfun and repmat:
>> A = [1,2,1,2,5; 3,2,2,1,2];
>> C = arrayfun(@(v,n)repmat(v,1,n),A(1,:),A(2,:),'UniformOutput',false);
>> B = horzcat(C{:})
B =
1 1 1 2 2 1 1 2 5 5

Sign in to comment.

More Answers (1)

Jan
Jan on 30 Nov 2015
If run time matters, you can try FEX: RunLength
x = [1 1 1 2 2 1 1 2 5 5];
[b, n] = RunLength(x);
Result = [b; n];

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!