MATLAB: How to loop the date vector, that the restrictions are the months,years and hours?

datevectorfind positionsloopMATLABspecific positions in a loop

%for k=xa:1:y2 xa is the first year of the data that i use a function to discover it and y2 is the last year
ka = find(IntervaloHorarioDateVec(:,1) == 2015);
kb = find(IntervaloHorarioDateVec(:,1) == 2016);
kc = find(IntervaloHorarioDateVec(:,1) == 2017);
kd = find(IntervaloHorarioDateVec(:,1) == 2018);
%1-12
%for m = 1:12
ke = find(IntervaloHorarioDateVec(:,2) == 1);
kf = find(IntervaloHorarioDateVec(:,2) == 2);
kg = find(IntervaloHorarioDateVec(:,2) == 3);
kh = find(IntervaloHorarioDateVec(:,2) == 4);
ki = find(IntervaloHorarioDateVec(:,2) == 5);
kj = find(IntervaloHorarioDateVec(:,2) == 6);
kk = find(IntervaloHorarioDateVec(:,2) == 7);
kl = find(IntervaloHorarioDateVec(:,2) == 8);
km = find(IntervaloHorarioDateVec(:,2) == 9);
kn = find(IntervaloHorarioDateVec(:,2) == 10);
ko = find(IntervaloHorarioDateVec(:,2) == 11);
kp = find(IntervaloHorarioDateVec(:,2) == 12);
kq = ismember(ka,ke,'rows');
kr = find(kq);
ks = ismember(ka,kf,'rows');
kt = find(ks);
ku = ismember(ka,kg,'rows');
kv = find(kv);
kw = ismember(ka,kh,'rows');
kx = find(kw);
ky = ismember(ka,ki,'rows');
kz = find(ky);
kaa = ismember(ka,kj,'rows');
kab = find(kaa);
kac = ismember(ka,kk,'rows');
kad = find(kac);
kae = ismember(ka,kl,'rows');
kaf = find(kae);
kag = ismember(ka,km,'rows');
kah = find(kag);
kai = ismember(ka,kn,'rows');
kaj = find(kai);
kak = ismember(ka,ko,'rows');
kal = find(kal);
kam = ismember(ka,kp,'rows');
kan = find(kan);
... doing this until 2018
% and for the hours of the day...
k1 = find(IntervaloHorarioDateVec(:,2) == 0);
k2 = find(IntervaloHorarioDateVec(:,2) == 1);
k3 = find(IntervaloHorarioDateVec(:,2) == 2);
k4 = find(IntervaloHorarioDateVec(:,2) == 3);
k5 = find(IntervaloHorarioDateVec(:,2) == 4);
k6 = find(IntervaloHorarioDateVec(:,2) == 5);
k7 = find(IntervaloHorarioDateVec(:,2) == 6);
k8 = find(IntervaloHorarioDateVec(:,2) == 7);
k9 = find(IntervaloHorarioDateVec(:,2) == 8);
k10 = find(IntervaloHorarioDateVec(:,2) == 9);
k11 = find(IntervaloHorarioDateVec(:,2) == 10);
k12 = find(IntervaloHorarioDateVec(:,2) == 11);
k13 = find(IntervaloHorarioDateVec(:,2) == 12);
k14 = find(IntervaloHorarioDateVec(:,2) == 13);
k15 = find(IntervaloHorarioDateVec(:,2) == 14);
k16 = find(IntervaloHorarioDateVec(:,2) == 15);
k17 = find(IntervaloHorarioDateVec(:,2) == 16);
k18 = find(IntervaloHorarioDateVec(:,2) == 17);
k19 = find(IntervaloHorarioDateVec(:,2) == 18);
k20 = find(IntervaloHorarioDateVec(:,2) == 19);
k21 = find(IntervaloHorarioDateVec(:,2) == 20);
k22 = find(IntervaloHorarioDateVec(:,2) == 21);
k23 = find(IntervaloHorarioDateVec(:,2) == 22);
k24 = find(IntervaloHorarioDateVec(:,2) == 23);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
Lia = ismember(k1,kr);
Idrow = find(Lia);
...to 00:00 until 24:00
... going thru all the years 2015-2018,months 1-12, hours 0-23h
%So i want to create a loop, that I can find 00 hours in the year, let's say 2015 of my data, or 2017, or both,
%and in that year i want to find the month, let's say January(01<-number of the month), or March(03),
%and in that YEAR and MONTH, i want to find the position of the 00:00 Hour or 12:00, in a data that is hourly
%so i want to find all the data that are in 00:00hour of all the first month of the first year, the 01:00 hour of the first month
%and so on til 23:00hour, the same with february to december until the end of y2(the last year).

Best Answer

Logical indexing:
for k = xa:y2
ka = (IntervaloHorarioDateVec(:,1) == k); % No FIND
for m = 1:12
kb = (IntervaloHorarioDateVec(:,2) == m);
for n = 0:23
ke = (IntervaloHorarioDateVec(:,4) == n);
match = find(ka & kb & ke);
...
end
end
end
Or:
for k = xa:y2
for m = 1:12
for n = 0:23
ke = (IntervaloHorarioDateVec(:,4) == n);
match = ismember(IntervaloHorarioDateVec(:, [1,2,4]), [ka, kb, ke], 'rows');
...
end
end
end