# Repeat element of a vector n times without loop.

629 views (last 30 days)

Show older comments

Justin Solomon
on 28 Aug 2012

Commented: Walter Roberson
on 13 Sep 2021

Say I have a column vector x=[a;b;c]. I want to repeat each element n times to make a long length(x)*n vector. For example, for n=3, the answer would be:

ans=

a

a

a

b

b

b

c

c

c

Can anyone think of an elegant way to do this without looping?

Thanks,

Justin

##### 1 Comment

John
on 9 Dec 2015

U can use repmat it not exactly elegant but it will do the job

x=[a;b;c]; n=3;

newx = [repmat(x(1),n,1);repmat(x(2),n,1);repmat(x(3),n,1)]

### Accepted Answer

Azzi Abdelmalek
on 28 Aug 2012

Edited: Azzi Abdelmalek
on 28 Aug 2012

n=3 ; x=(1:3)' % example

r=repmat(x,1,n)';

r=r(:)'

##### 3 Comments

Jan
on 29 Aug 2012

### More Answers (6)

Walter Roberson
on 28 Aug 2012

kron(x, ones(n,1))

##### 4 Comments

Walter Roberson
on 14 Dec 2018

The * matrix multiplication operator cannot by itself repeat elements. You would need something like

(x.' * repmat(eye(length(x)), 1, n)).'

if you wanted to use the * operator to duplicate elements -- forcing you to call upon repmat() to duplicate elements.

Using the kronecker is a known idiom for duplicating data. It can be used for non-vectors too.

>> kron([1 2;3 4], ones(3,1))

ans =

1 2

1 2

1 2

3 4

3 4

3 4

Kevin Moerman
on 29 Aug 2012

There is several others ways of doing it which in some cases are more efficient. Have a look at what the size of your vector is and compare the methods. Below I compare speeds and it appears that on my computer the third and fourth methods are mostly faster for large arrays.

n=100000; x=1:3;

a=zeros(n,numel(x)); b=a; c=a; d=a; %memory allocation

tic; a=repmat(x, n, 1); t1=toc; %Repmat method

tic; b=kron(x, ones(n,1)); t2=toc; %kron method

tic; c=x(ones(1,n),:); t3=toc; %indexing method

tic; d=ones(n,1)*x; t4=toc; %multiplication method

Kevin

##### 2 Comments

Walter Roberson
on 13 Sep 2021

format long g

n=100000; x=1:3;

a=zeros(n,numel(x)); b=a; c=a; d=a; %memory allocation

tic; a=repmat(x, n, 1); t1=toc %Repmat method

tic; b=kron(x, ones(n,1)); t2=toc %kron method

tic; c=x(ones(1,n),:); t3=toc %indexing method

tic; d=ones(n,1)*x; t4=toc %multiplication method

Jianshe Feng
on 3 Oct 2016

ind = [1;1;1;2;2;2;3;3;3]; x(ind)

##### 1 Comment

Walter Roberson
on 7 Apr 2017

Ah, but how do you construct the ind vector for general length n repetitions ?

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!