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

1 次查看(过去 30 天)
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?

采纳的回答

Stephen23
Stephen23 2015-11-30
编辑:Stephen23 2015-11-30
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 个评论
Stephen23
Stephen23 2015-11-30
编辑:Stephen23 2015-11-30
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

请先登录,再进行评论。

更多回答(1 个)

Jan
Jan 2015-11-30
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];

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by