help: creating vectors.
Afficher commentaires plus anciens
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
Réponses (2)
KSSV
le 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.
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 commentaire
Pasqualina Verolino
le 15 Mar 2017
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!