Interleaved repmat (row duplication)

5 visualizaciones (últimos 30 días)
Albert
Albert el 5 de Nov. de 2021
Comentada: Albert el 5 de Nov. de 2021
I would like to do a specific repmat such that if I have:
a=[1 0 0;0 0 1;1 1 1]
a = 3×3
1 0 0 0 0 1 1 1 1
I would like to duplicate each row by a value N, so that in the case N = 2 each row will be duplicated twice:
b=[1 0 0;1 0 0;0 0 1;0 0 1;1 1 1;1 1 1]
b = 6×3
1 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1
Is there an easy way of doing this interleaved repmat? Thanks

Respuesta aceptada

Stephen23
Stephen23 el 5 de Nov. de 2021
The simple and efficient approach is to use REPELEM:
a = [1,0,0;0,0,1;1,1,1]
a = 3×3
1 0 0 0 0 1 1 1 1
b = repelem(a,2,1)
b = 6×3
1 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1
  1 comentario
Albert
Albert el 5 de Nov. de 2021
Very elegant solution indeed! I found another option which is:
a = [1,0,0;0,0,1;1,1,1];
reshape(repmat(a',2,1),size(a,2),size(a,1)*2)'
ans = 6×3
1 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1
But yours is much better. thanks!

Iniciar sesión para comentar.

Más respuestas (1)

Sudharsana Iyengar
Sudharsana Iyengar el 5 de Nov. de 2021
Try this
A=[1,0,0; 0 0 1; 1 1 1;];
k=1;
for i =1:3
T(k:k+1,:)=repmat(A(i,:),2,1);
k=k+2;
end
T
T = 6×3
1 0 0 1 0 0 0 0 1 0 0 1 1 1 1 1 1 1

Categorías

Más información sobre Resizing and Reshaping Matrices 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