Skip to content
Snippets Groups Projects
Commit 15b17095 authored by Stéphane Adjemian's avatar Stéphane Adjemian
Browse files

Improve speed of comparison methods (lt, gt, le and ge) for @dates class.

parent 054500c7
No related branches found
No related tags found
No related merge requests found
...@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat) ...@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
C = (A==B); C = (A==B);
idx = find(C==0); idx = find(C==0);
for i=1:length(idx) for i=1:length(idx)
C(idx(i)) = compare_vectors(@gt, A.time(idx(i),:), B.time(idx(i),:)); C(idx(i)) = greaterorequal(A.time(idx(i),:), B.time(idx(i),:));
end end
else else
if isequal(A.ndat,1) && isequal(B.ndat,1) if isequal(A.ndat,1)
C = compare_vectors(@ge, A.time, B.time);
elseif isequal(A.ndat,1)
C = NaN(B.ndat,1); C = NaN(B.ndat,1);
for i=1:B.ndat for i=1:B.ndat
C(i) = compare_vectors(@ge, A.time, B.time(i,:)); C(i) = greaterorequal(A.time, B.time(i,:));
end end
elseif isequal(B.ndat,1) elseif isequal(B.ndat,1)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@ge, A.time(i,:), B.time); C(i) = greaterorequal(A.time(i,:), B.time);
end end
else else
C = 0; C = 0;
end end
end end
function c = greaterorequal(a,b)
if a(1)>b(1)
c = 1;
else
if a(1)<b(1)
c = 0;
else
if a(2)>=b(2)
c = 1;
else
c = 0;
end
end
end
%@test:1 %@test:1
%$ % Define some dates %$ % Define some dates
%$ date_2 = '1950Q2'; %$ date_2 = '1950Q2';
......
...@@ -42,26 +42,40 @@ end ...@@ -42,26 +42,40 @@ end
if isequal(A.ndat, B.ndat) if isequal(A.ndat, B.ndat)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@gt, A.time(i,:), B.time(i,:)); C(i) = greaterthan(A.time(i,:), B.time(i,:));
end end
else else
if isequal(A.ndat,1) && isequal(B.ndat,1) if isequal(A.ndat,1)
C = compare_vectors(@gt, A.time, B.time);
elseif isequal(A.ndat,1)
C = NaN(B.ndat,1); C = NaN(B.ndat,1);
for i=1:B.ndat for i=1:B.ndat
C(i) = compare_vectors(@gt, A.time, B.time(i,:)); C(i) = greaterthan(A.time, B.time(i,:));
end end
elseif isequal(B.ndat,1) elseif isequal(B.ndat,1)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@gt, A.time(i,:), B.time); C(i) = greaterthan(A.time(i,:), B.time);
end end
else else
C = 0; C = 0;
end end
end end
function c = greaterthan(a,b)
if a(1)>b(1)
c = 1;
else
if a(1)<b(1)
c = 0;
else
if a(2)>b(2)
c = 1;
else
c = 0;
end
end
end
%@test:1 %@test:1
%$ % Define some dates %$ % Define some dates
%$ date_2 = '1950Q2'; %$ date_2 = '1950Q2';
......
...@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat) ...@@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
C = (A==B); C = (A==B);
idx = find(C==0); idx = find(C==0);
for i=1:length(idx) for i=1:length(idx)
C(idx(i)) = compare_vectors(@lt, A.time(idx(i),:), B.time(idx(i),:)); C(idx(i)) = lessorequal(A.time(idx(i),:), B.time(idx(i),:));
end end
else else
if isequal(A.ndat,1) && isequal(B.ndat,1) if isequal(A.ndat,1)
C = compare_vectors(@le, A.time, B.time);
elseif isequal(A.ndat,1)
C = NaN(B.ndat,1); C = NaN(B.ndat,1);
for i=1:B.ndat for i=1:B.ndat
C(i) = compare_vectors(@le, A.time, B.time(i,:)); C(i) = lessorequal(A.time, B.time(i,:));
end end
elseif isequal(B.ndat,1) elseif isequal(B.ndat,1)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@le, A.time(i,:), B.time); C(i) = lessorequal(A.time(i,:), B.time);
end end
else else
C = 0; C = 0;
end end
end end
function c = lessorequal(a, b)
if a(1)<b(1)
c = 1;
else
if a(1)>b(1)
c = 0;
else
if a(2)<=b(2)
c = 1;
else
c = 0;
end
end
end
%@test:1 %@test:1
%$ % Define some dates %$ % Define some dates
%$ date_2 = '1950Q2'; %$ date_2 = '1950Q2';
......
...@@ -42,26 +42,39 @@ end ...@@ -42,26 +42,39 @@ end
if isequal(A.ndat, B.ndat) if isequal(A.ndat, B.ndat)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@lt, A.time(i,:), B.time(i,:)); C(i) = lessthan(A.time(i,:),B.time(i,:));
end end
else else
if isequal(A.ndat,1) && isequal(B.ndat,1) if isequal(A.ndat,1)
C = compare_vectors(@lt, A.time, B.time);
elseif isequal(A.ndat,1)
C = NaN(B.ndat,1); C = NaN(B.ndat,1);
for i=1:B.ndat for i=1:B.ndat
C(i) = compare_vectors(@lt, A.time, B.time(i,:)); C(i) = lessthan(A.time,B.time(i,:));
end end
elseif isequal(B.ndat,1) elseif isequal(B.ndat,1)
C = NaN(A.ndat,1); C = NaN(A.ndat,1);
for i=1:A.ndat for i=1:A.ndat
C(i) = compare_vectors(@lt, A.time(i,:), B.time); C(i) = lessthan(A.time(i,:),B.time);
end end
else else
C = 0; C = 0;
end end
end end
function c = lessthan(a,b)
if a(1)<b(1)
c = 1;
else
if a(1)>b(1)
c = 0;
else
if a(2)<b(2)
c = 1;
else
c = 0;
end
end
end
%@test:1 %@test:1
%$ % Define some dates %$ % Define some dates
%$ date_2 = '1950Q2'; %$ date_2 = '1950Q2';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment