create vector of repeating elements (sort of)

5 vues (au cours des 30 derniers jours)
Leor Greenberger
Leor Greenberger le 20 Sep 2011
Commenté : HC Song le 1 Juin 2017
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]

Réponse acceptée

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

Plus de réponses (4)

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

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

Connectez-vous pour commenter.


Lucas García
Lucas García le 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 le 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 commentaire
Jan
Jan le 20 Sep 2011
ARRAYFUN and CELL2MAT needs a lot of time. Using REPMAT directly is much faster.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Types dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by