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

5 visualizaciones (últimos 30 días)
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]??

Respuesta aceptada

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

Más respuestas (2)

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

Iniciar sesión para comentar.


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

Categorías

Más información sobre String Parsing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by