フィルターのクリア

Duplicating rows in a matrix

116 ビュー (過去 30 日間)
Edward Johnsen
Edward Johnsen 2019 年 1 月 23 日
編集済み: Stephen23 2022 年 1 月 5 日
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 Center および File ExchangeChemistry についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by