repelem substitute for older matlab version

10 visualizaciones (últimos 30 días)
MiauMiau
MiauMiau el 24 de Jun. de 2017
Comentada: KSSV el 24 de Jun. de 2017
Hi,
I want to do the following (what usually repelem does, however an older version of Matlab does not seem to have it):
Given vector a = [3 45 6 ];
I would want for instance its first element to be repeated 2 times, the second 4 times, the third element once (just as an example). So we would end up with:
aNew = [3 3 4 45 45 45 6 6];
How can that be done in a systematic way without repelem?
Thanks
  1 comentario
Stephen23
Stephen23 el 24 de Jun. de 2017
You say that you want "the third element once", but it appears twice in your example. Which is correct? Where does that 4 come from?

Iniciar sesión para comentar.

Respuestas (2)

Stephen23
Stephen23 el 24 de Jun. de 2017
>> A = [3,45,6];
>> R = [2,4,1];
>> cell2mat(arrayfun(@(a,r)repmat(a,1,r),A,R,'uni',0))
ans =
3 3 45 45 45 45 6

KSSV
KSSV el 24 de Jun. de 2017
a = [3 45 6 ];
aNew = [3 3 45 45 45 45 6 6];
R = [2 4 3] ;
iwant = [] ;
for i = 1:length(R)
iwant = [iwant ones(1,R(i))*a(i)] ;
end
  2 comentarios
Stephen23
Stephen23 el 24 de Jun. de 2017
Expanding arrays within loops is not recommended:
See my answer for a one-line solution that does not expand arrays inside loops.
KSSV
KSSV el 24 de Jun. de 2017
a = [3 45 6 ];
aNew = [3 3 45 45 45 45 6 6];
R = [2 4 3] ;
iwant = cell(1,length(R)) ;
for i = 1:length(R)
iwant{i} = ones(1,R(i))*a(i) ;
end
iwant = [iwant{:}]

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by