How to fill in this matrix?
Afficher commentaires plus anciens
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
Réponse acceptée
Plus de réponses (3)
Walter Roberson
le 14 Oct 2013
time(2,:) = reshape(kron(1:24, ones(16,4)), 1, []);
1 commentaire
Andrei Bobrov
le 14 Oct 2013
Modifié(e) : Andrei Bobrov
le 14 Oct 2013
reshape(kron(1:24, ones(16,4))',1,[])
or
reshape(kron((1:24)', ones(4,16)),1,[])
Andrei Bobrov
le 14 Oct 2013
reshape(repmat(1:24,[4,1,16]),1,[])
Jos (10584)
le 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
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!