create vector of repeating elements (sort of)

5 views (last 30 days)
How can I easily create a vector such that:
w = 3
n = 8
v = (1 w times) (2 w times) (3 w times) ... (n w times)
so i would have:
v = [1 1 1 2 2 2 3 3 3 4 4 4 .... 8 8 8]

Accepted Answer

the cyclist
the cyclist on 20 Sep 2011
Here is one way:
w = 3;
n = 8;
v = repmat(1:n,[w 1])
v = v(:)'

More Answers (4)

Oleg Komarov
Oleg Komarov on 20 Sep 2011
For variable w use rude from the fex:
rude(len,val)

Richard Tyson
Richard Tyson on 15 Aug 2013
If you need it to be fast you should avoid using repmat. Stick to C functions which don't need to parse input arguments and do one specific task:
n = 8;
w = 3;
v = ceil( [1:(w*n)]./w )
If anyone has a faster way please post. I do this kind of operation a lot.
  2 Comments
the cyclist
the cyclist on 15 Aug 2013
This thread is nearly two years old. You might want to post this as a new question.
Artur Palha
Artur Palha on 25 Sep 2014
n = 8; w = 3; v = rectpulse(1:n)
This is the fastest option I know of.

Sign in to comment.


Lucas García
Lucas García on 20 Sep 2011
One of many ways:
>> w = 3; n = 8;
>> v = repmat(1:n,w,1);
>> v = v(1:end)

Wayne King
Wayne King on 20 Sep 2011
One way:
w = 3;
x = 1:8;
x = arrayfun(@(x) repmat(x,1,w),x,'UniformOutput',false);
x = cell2mat(x);
Wayne
  1 Comment
Jan
Jan on 20 Sep 2011
ARRAYFUN and CELL2MAT needs a lot of time. Using REPMAT directly is much faster.

Sign in to comment.

Categories

Find more on Data Types in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!