Repeating the rows of an array by a number given by another array
Mostrar comentarios más antiguos
Consider the array:
x=[linspace(1,4,4)' linspace(5,20,4)']
I would like to repeat each row by a number given by another array such as
I=[2 3 2 1]'
so that at the end the first row of x is repeat twice, the second row is repeated 3 times and so on.
Is this possible without using a loop?
Respuesta aceptada
Más respuestas (1)
x=[linspace(1,4,4)' linspace(5,20,4)'] ;
I=[2 3 2 1]' ;
C = cell(length(I),1) ;
for i = 1:length(C)
C{i} = repmat(x(i,:),I(i),1) ;
end
C = cell2mat(C)
4 comentarios
Mike Croucher
el 17 de Feb. de 2022
That's got a loop though
Saeid
el 17 de Feb. de 2022
Mike Croucher
el 17 de Feb. de 2022
OK good! There has been a lot of work done by MathWorks in recent years on improving the efficiency of loops. You do not need to be afraid of them any more. In many cases, they are on par with vectorised methods.
If the algorithm can be expressed naturally as a loop, do so. Only worry about other methods if the performance is problematic.
Saeid
el 17 de Feb. de 2022
Categorías
Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!