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

5 Ansichten (letzte 30 Tage)
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]??

Akzeptierte Antwort

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

Weitere Antworten (2)

Roger Stafford
Roger Stafford am 14 Jul. 2014
Bearbeitet: Roger Stafford am 14 Jul. 2014
Another way:
t = accumarray(cumsum([1,a]).',1);
c = b(cumsum(t(1:end-1)));
  2 Kommentare
Jan
Jan am 14 Jul. 2014
I assume you mean "t = " instead of "t - "
Roger Stafford
Roger Stafford am 14 Jul. 2014
Oops! Yes, thank you Jan.

Melden Sie sich an, um zu kommentieren.


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

Community Treasure Hunt

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

Start Hunting!

Translated by