Repetition of elements in a matrix

3 views (last 30 days)
Suppose i have a matrix A= [25 21 ] . I want to repeat elements by 4 and 2 times respectively. Repeat=[4 2]. However the repeated values will be in proportion i.e. Proportion=[8 17]. The sum of proportion repeated element will be equal to A matrix elements. It means that final matrix will be B= [8 8 8 1 17 4].
(25=8+8+8+1 , 21=17+4 )
Pls suggest code to generate matrix B

Accepted Answer

Walter Roberson
Walter Roberson on 4 Sep 2021
A = [25 21 ]
A = 1×2
25 21
Repeat = [4 2]
Repeat = 1×2
4 2
Proportion = [8 17]
Proportion = 1×2
8 17
leftover = A - Proportion .* (Repeat-1);
toRepeat = reshape([Proportion; leftover],1,[]);
repeatCount = reshape([Repeat-1; ones(1,length(Repeat))],1,[]);
B = repelem(toRepeat, repeatCount)
B = 1×6
8 8 8 1 17 4
  2 Comments
Danish Nasir
Danish Nasir on 4 Sep 2021
It nearly solved my problem. I just want to add one complexity in the problem. There is a 3rd element in the matrix which i do not want to propotionate
A=[25 21 30]
Repeat=[4 2 1]
Proportion=[8 17 30].
B=[8 8 8 1 17 4 30]
Can you suggest how to generate B?
Walter Roberson
Walter Roberson on 4 Sep 2021
The code already handles that.
A = [25 21 30]
A = 1×3
25 21 30
Repeat = [4 2 1]
Repeat = 1×3
4 2 1
Proportion = [8 17 30]
Proportion = 1×3
8 17 30
leftover = A - Proportion .* (Repeat-1);
toRepeat = reshape([Proportion; leftover],1,[]);
repeatCount = reshape([Repeat-1; ones(1,length(Repeat))],1,[]);
B = repelem(toRepeat, repeatCount)
B = 1×7
8 8 8 1 17 4 30

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!