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

조회 수: 7 (최근 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.
Hung Dao
Hung Dao 2021년 11월 9일
Thank you very much. This is exactly what I need.

댓글을 달려면 로그인하십시오.

추가 답변 (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
Sulaymon Eshkabilov 2021년 11월 9일
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
  댓글 수: 2
Hung Dao
Hung Dao 2021년 11월 9일
Thank you very much.
I am wondering if there is a more efficient way than using a forloop?
Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021년 11월 9일
I don't believe there is an alternative more efficient way than using [for .. end] or [while .. end] loop.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by