Interleaved repmat (row duplication)

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

 Réponse acceptée

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 commentaire

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!

Connectez-vous pour commenter.

Plus de réponses (1)

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

Catégories

En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by