How to duplicate rows of a matrix if the number of copies for each row are different?

14 次查看(过去 30 天)
Hi all,
I want to duplicate each rows of a matrix according to the numbers given in a vector.
For example, I have matrix A and vector , I want to duplicate the first row of A 2 times, second row by 4 times and third row by 5 times.
Is there any way to do this?
Thank you for your help.

采纳的回答

Stephen23
Stephen23 2021-11-9
编辑:Stephen23 2021-11-9
out = repelem(A,b,1)
  3 个评论
Stephen23
Stephen23 2021-11-9
编辑:Stephen23 2021-11-9
Use REPELEM, not REPMAT. Assuming that your matrix A has as many rows as b has elements:
A = randi(9,3,4)
A = 3×4
1 5 2 6 5 9 8 6 2 2 7 4
b = [2,4,5];
out = repelem(A,b,1)
out = 11×4
1 5 2 6 1 5 2 6 5 9 8 6 5 9 8 6 5 9 8 6 5 9 8 6 2 2 7 4 2 2 7 4 2 2 7 4 2 2 7 4
This is much simpler and more efficient than using a WHILE or FOR loop.

请先登录,再进行评论。

更多回答(2 个)

KSSV
KSSV 2021-11-9
Read about repmat.
b = [2 4 5] ;
A = repmat(b,2,1)
A = 2×3
2 4 5 2 4 5
B = repmat(b,3,1)
B = 3×3
2 4 5 2 4 5 2 4 5

Sulaymon Eshkabilov
It can be done in a few different ways, e.g.:
A = magic(3)
A = 3×3
8 1 6 3 5 7 4 9 2
b = [2, 4, 5];
AA = [repmat(A(1,:), b(1),1);repmat(A(2,:), b(2),1); repmat(A(3,:), b(3),1)]
AA = 11×3
8 1 6 8 1 6 3 5 7 3 5 7 3 5 7 3 5 7 4 9 2 4 9 2 4 9 2 4 9 2
% Alternative way:
A = magic(3);
b = [2, 4, 5];
AA =[];
for ii = 1:numel(b)
AA = [AA; repmat(A(ii,:), b(ii),1)];
end
AA
AA = 11×3
8 1 6 8 1 6 3 5 7 3 5 7 3 5 7 3 5 7 4 9 2 4 9 2 4 9 2 4 9 2

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by