Duplicating rows in a matrix

Hi there
I have a matrix that i need to make twice as long. i.e i need to double the length of columns. eg i need:
[0 1 0 0]
[0 2 0 0]
to become:
[0 1 0 0]
[0 1 0 0]
[0 2 0 0]
[0 2 0 0]
Thanks

1 Commento

A = [0,1,0,0;0,2,0,0]
A = 2×4
0 1 0 0 0 2 0 0
B = repelem(A,2,1)
B = 4×4
0 1 0 0 0 1 0 0 0 2 0 0 0 2 0 0

Accedi per commentare.

 Risposta accettata

Star Strider
Star Strider il 23 Gen 2019
Modificato: Star Strider il 23 Gen 2019
Try this:
M = [0 1 0 0
0 2 0 0];
M2 = repmat(M, 1, 2);
M2 = reshape(M2', [], 4)'
producing:
M2 =
0 1 0 0
0 1 0 0
0 2 0 0
0 2 0 0
You could combine both calculations into a one-line calcualtion if you want to.
EDIT —
Generally, for ‘N’ repitions, the code becomes:
N = 4; % Number Of Repititions
Mn = repmat(M, 1, N)
Mn = reshape(Mn', [], 2*N)'
producing:
Mn =
0 1 0 0
0 1 0 0
0 1 0 0
0 1 0 0
0 2 0 0
0 2 0 0
0 2 0 0
0 2 0 0

3 Commenti

elegant solution.
to make this a truly generic solution, the 2*N should be replaced by m*N, where m is the number of rows being duplicated. The 2 assumes that the original array has only 2 rows.
@Matthew Allison if you think that is elegant, just wait until you see REPELEM in action:
M = [0,1,0,0;0,2,0,0]
M = 2×4
0 1 0 0 0 2 0 0
Mn = repelem(M,2,1)
Mn = 4×4
0 1 0 0 0 1 0 0 0 2 0 0 0 2 0 0
REPELEM was introduced in R2015a, it is not clear why StarStrider avoided using it here.
Star Strider
Star Strider il 3 Gen 2022
Modificato: Star Strider il 4 Gen 2022
@Matthew Allison — Thank you!
@Stephen — Because I wanted to make it general enough to work with earlier versions as well.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su MATLAB in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by