If a=[1 2 3], b=[10 20 30], how to create c=[10 20 20 30 30 30]?

1 view (last 30 days)
The b matrix i'th element is repeated the number of times the given number in 'a' matrix and placed in matix 'c'. Also if a=[0 1 2], b=[10 20 30] how to get c=[20 30 30]??

Accepted Answer

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon on 14 Jul 2014
c = cell2mat(arrayfun(@repmat,b,ones(size(a)),a,'uni',0));

More Answers (2)

Roger Stafford
Roger Stafford on 14 Jul 2014
Edited: Roger Stafford on 14 Jul 2014
Another way:
t = accumarray(cumsum([1,a]).',1);
c = b(cumsum(t(1:end-1)));

Jan
Jan on 14 Jul 2014
For large array this is efficient: FEX: RunLength
c = RunLength(a, b)

Categories

Find more on Multidimensional Arrays 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!