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일

7 개 추천

Here is one way:
w = 3;
n = 8;
v = repmat(1:n,[w 1])
v = v(:)'

추가 답변 (4개)

Lucas García
Lucas García 2011년 9월 20일

1 개 추천

One of many ways:
>> w = 3; n = 8;
>> v = repmat(1:n,w,1);
>> v = v(1:end)
Oleg Komarov
Oleg Komarov 2011년 9월 20일

1 개 추천

For variable w use rude from the fex:
rude(len,val)
Richard Tyson
Richard Tyson 2013년 8월 15일

1 개 추천

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.

댓글을 달려면 로그인하십시오.

Wayne King
Wayne King 2011년 9월 20일

0 개 추천

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.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

질문:

2011년 9월 20일

댓글:

2017년 6월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by