Repetition of elements in a matrix

3 visualizaciones (últimos 30 días)
Danish Nasir
Danish Nasir el 4 de Sept. de 2021
Comentada: Walter Roberson el 4 de Sept. de 2021
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

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Sept. de 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 comentarios
Danish Nasir
Danish Nasir el 4 de Sept. de 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 el 4 de Sept. de 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

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by