Improve speed of @dates/colon method.

time-shift
Stéphane Adjemian (Charybdis) 2014-05-14 17:23:56 +02:00
parent 6aee567382
commit 84caf6d35f
3 changed files with 20 additions and 20 deletions

View File

@ -68,23 +68,18 @@ end
C = dates();
n = (B-A)+1;
if d>1
n = length(1:d:n);
end
C.freq = A.freq;
C.ndat = n;
C.time = NaN(n,2);
C.time(1,:) = A.time;
current_date = A;
linee = 1;
while current_date<B
linee = linee+1;
for linee=2:n
C.time(linee,:) = add_periods_to_array_of_dates(C.time(linee-1,:), C.freq, d);
current_date = current_date + d;
end
C.time = C.time(1:linee,:);
C.ndat = rows(C.time);
%@test:1
%$ % Define two dates
%$ date_1 = '1950Q2';

View File

@ -27,12 +27,16 @@ time(:,1) = time(:,1) + fix(p/freq);
time(:,2) = time(:,2) + rem(p,freq);
id1 = find(time(:,2)>freq);
time(id1,1) = time(id1,1) + 1;
time(id1,2) = time(id1,2) - freq;
if ~isempty(id1)
time(id1,1) = time(id1,1) + 1;
time(id1,2) = time(id1,2) - freq;
end
id2 = find(time(:,2)<1);
time(id2,1) = time(id2,1) - 1;
time(id2,2) = time(id2,2) + freq;
if ~isempty(id2)
time(id2,1) = time(id2,1) - 1;
time(id2,2) = time(id2,2) + freq;
end
%@test:1
%$ t(1) = dyn_assert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]);

View File

@ -26,7 +26,7 @@ end
if isyearly(a)
year = 1:(regexp(a,'[AaYy]')-1);
date.freq = 1;
date.time = write_time_field(a, year);
date.time = write_time_field_y(a, year);
return
end
@ -51,13 +51,14 @@ if isweekly(a)
return
end
function b = write_time_field(c, d)
b(1) = str2num(c(d));
if ismember(c(d(end)+1),{'Y','y','A','a'})
b(2) = 1;
else
b(2) = str2num(c(d(end)+2:end));
end
b(1) = str2double(c(d));
b(2) = str2double(c(d(end)+2:end));
function b = write_time_field_y(c, d)
b(1) = str2double(c(d));
b(2) = 1;
%@test:1
%$