help: creating vectors.
Ältere Kommentare anzeigen
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
Antworten (2)
KSSV
am 15 Mär. 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.
Rep = [30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28];
Value = 4:(3+length(Rep)); % Test data
R = repelem(Value, Rep);
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 Kommentar
Pasqualina Verolino
am 15 Mär. 2017
Kategorien
Mehr zu Matrix Indexing finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!