help: creating vectors.
13 次查看(过去 30 天)
显示 更早的评论
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
0 个评论
回答(2 个)
KSSV
2017-3-15
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.
0 个评论
Jan
2017-3-15
编辑:Jan
2017-3-15
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));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!