help: creating vectors.

13 views (last 30 days)
Pasqualina Verolino
Pasqualina Verolino on 15 Mar 2017
Edited: Jan on 15 Mar 2017
I have to create a vector, which returns 4 for the first 30 numbers, 5 for the next 31, the next 6 to 30 etc. etc. in particular, it must give me a number from 4 to 14, repeated for a number of times equal to 30, 31 or 28, in the order (30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28), or 30 4 times, 31 5 times, 30 6 times, etc. etc

Answers (2)

KSSV
KSSV on 15 Mar 2017
If you want 31 5 times, 30 six times use like below:
[31*ones(1,5) 30*ones(1,6)]
You can add whatever you want in the above code similarly.

Jan
Jan on 15 Mar 2017
Edited: Jan on 15 Mar 2017
This is a job for repelem:
Rep = [30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28];
Value = 4:(3+length(Rep)); % Test data
R = repelem(Value, Rep);
This was introduced in R2015a. If you have an older version, you can either use FEX: RunLength:
RunLength(Value, Rep)
Or program it explicitly:
len = length(Rep); % Number of bins
d = cumsum(Rep); % Cummulated run lengths
index = zeros(1, d(len)); % Pre-allocate
index(d(1:len-1)+1) = 1; % Get the indices where the value changes
index(1) = 1; % First element is treated as "changed" also
R = Value(cumsum(index));
  1 Comment
Pasqualina Verolino
Pasqualina Verolino on 15 Mar 2017
wow it fix perfect! thank u so much!

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!