How to fill in this matrix?
Show older comments
I have a 3x1536 matrix named time
On the 2nd row I'm trying to fill it in with hours of the day but I need four of each hour so for example:
1 1 1 1 2 2 2 2 3 3 3 3...24 24 24 24 1 1 1 1 2 2 2 2 and so on
.
I have no idea how to go about indexing the matrix in a way that I don't have to write then modify 96 loops/indexing lines of code because I have to fill it out in the only way I can think of right now which is:
for a=1:96:1536
time(2,a)=0;
end
.
for b=2:96:1536
time(2,b)=0;
end
...
for e=5:96:1536
time(2,e)=1;
end
Accepted Answer
More Answers (3)
Walter Roberson
on 14 Oct 2013
time(2,:) = reshape(kron(1:24, ones(16,4)), 1, []);
1 Comment
Andrei Bobrov
on 14 Oct 2013
Edited: Andrei Bobrov
on 14 Oct 2013
reshape(kron(1:24, ones(16,4))',1,[])
or
reshape(kron((1:24)', ones(4,16)),1,[])
Andrei Bobrov
on 14 Oct 2013
reshape(repmat(1:24,[4,1,16]),1,[])
Jos (10584)
on 14 Oct 2013
There are many roads to Rome. Here is another generic and fast solution:
% example data
time = zeros(3,26) % in your case: 3-by-1536
Nval = 6 % in your case : 24
Nrep = 3 % in your case : 4
% engine
time(2,:) = mod(floor((0:(size(time,2)-1))/Nrep), Nval) + 1
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!