Interleaved repmat (row duplication)

6 views (last 30 days)
Albert
Albert on 5 Nov 2021
Commented: Albert on 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

Accepted Answer

Stephen23
Stephen23 on 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 Comment
Albert
Albert on 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!

Sign in to comment.

More Answers (1)

Sudharsana Iyengar
Sudharsana Iyengar on 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

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!