From 84caf6d35f00855bd766178033f7a526d1d47f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 14 May 2014 17:23:56 +0200 Subject: [PATCH] Improve speed of @dates/colon method. --- matlab/@dates/colon.m | 13 ++++--------- .../dates/add_periods_to_array_of_dates.m | 12 ++++++++---- matlab/utilities/dates/string2date.m | 15 ++++++++------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/matlab/@dates/colon.m b/matlab/@dates/colon.m index 4449d9a3f..76e78a227 100644 --- a/matlab/@dates/colon.m +++ b/matlab/@dates/colon.m @@ -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_datefreq); -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]); diff --git a/matlab/utilities/dates/string2date.m b/matlab/utilities/dates/string2date.m index 139b65dbf..bb91a05fb 100644 --- a/matlab/utilities/dates/string2date.m +++ b/matlab/utilities/dates/string2date.m @@ -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 %$