Interleaved repmat (row duplication)

10 visualizzazioni (ultimi 30 giorni)
Albert
Albert il 5 Nov 2021
Commentato: Albert il 5 Nov 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

Risposta accettata

Stephen23
Stephen23 il 5 Nov 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 Commento
Albert
Albert il 5 Nov 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!

Accedi per commentare.

Più risposte (1)

Sudharsana Iyengar
Sudharsana Iyengar il 5 Nov 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

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by