Duplicating rows in a matrix

168 次查看(过去 30 天)
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 个评论
Stephen23
Stephen23 2022-1-3
编辑:Stephen23 2022-1-5
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

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2019-1-23
编辑:Star Strider 2019-1-23
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 个评论
Stephen23
Stephen23 2022-1-3
编辑:Stephen23 2022-1-3
@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 2022-1-3
编辑:Star Strider 2022-1-4
@Matthew Allison — Thank you!
@Stephen — Because I wanted to make it general enough to work with earlier versions as well.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Parallel for-Loops (parfor) 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by