How to repeat rows of matrix?

조회 수: 4 (최근 30일)
Tom
Tom 2013년 6월 13일
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.

채택된 답변

Matt Kindig
Matt Kindig 2013년 6월 13일
편집: Matt Kindig 2013년 6월 13일
One way:
f = @(k) repmat(M(k,:), round(V(k)), 1);
MM = cell2mat(arrayfun(f, (1:length(V))', 'UniformOutput', false));

추가 답변 (4개)

Roger Stafford
Roger Stafford 2013년 6월 13일
Here's yet another possibility:
p = accumarray(cumsum([1;v]),1);
M = M(cumsum(p(1:end-1)),:);

Matt J
Matt J 2013년 6월 13일
편집: Matt J 2013년 6월 13일
c=cumsum(V);
[~,i]=max(bsxfun(@le,1:c(end),c));
MM=M(i,:),

Azzi Abdelmalek
Azzi Abdelmalek 2013년 6월 13일
out=cell2mat(arrayfun(@(x) repmat(M(x,:),V(x),1),[1:numel(V)]','un',0))

Matt J
Matt J 2013년 6월 13일
편집: Matt J 2013년 6월 13일
c=cumsum(V);
z=sparse(1,c(end)+1-c,1,1, c(end));
m=fliplr(cumsum(z))
Mnew = M(m(1)+1-m,:),

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by