create vector of repeating elements (sort of)

9 次查看(过去 30 天)
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]

采纳的回答

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

更多回答(4 个)

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

Richard Tyson
Richard Tyson 2013-8-15
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 个评论
the cyclist
the cyclist 2013-8-15
This thread is nearly two years old. You might want to post this as a new question.
Artur Palha
Artur Palha 2014-9-25
n = 8; w = 3; v = rectpulse(1:n)
This is the fastest option I know of.

请先登录,再进行评论。


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

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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by