How to repeat rows of matrix?

Hi,
I have a matrix and a vector indicating how many times the corresponding lines in the matrix should appear. I'd like to turn this into a single matrix.
For example:
M= 1 2 V=1
2 3 2
4 3 1
2 4 2
should become
M =1 2
2 3
2 3
4 3
2 4
2 4
Does anyone have advice on how to accomplish this? Many thanks.

 Respuesta aceptada

Matt Kindig
Matt Kindig el 13 de Jun. de 2013
Editada: Matt Kindig el 13 de Jun. de 2013

0 votos

One way:
f = @(k) repmat(M(k,:), round(V(k)), 1);
MM = cell2mat(arrayfun(f, (1:length(V))', 'UniformOutput', false));

Más respuestas (4)

Roger Stafford
Roger Stafford el 13 de Jun. de 2013

1 voto

Here's yet another possibility:
p = accumarray(cumsum([1;v]),1);
M = M(cumsum(p(1:end-1)),:);
Matt J
Matt J el 13 de Jun. de 2013
Editada: Matt J el 13 de Jun. de 2013

0 votos

c=cumsum(V);
[~,i]=max(bsxfun(@le,1:c(end),c));
MM=M(i,:),
Azzi Abdelmalek
Azzi Abdelmalek el 13 de Jun. de 2013

0 votos

out=cell2mat(arrayfun(@(x) repmat(M(x,:),V(x),1),[1:numel(V)]','un',0))
Matt J
Matt J el 13 de Jun. de 2013
Editada: Matt J el 13 de Jun. de 2013

0 votos

c=cumsum(V);
z=sparse(1,c(end)+1-c,1,1, c(end));
m=fliplr(cumsum(z))
Mnew = M(m(1)+1-m,:),

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

Tom
el 13 de Jun. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by