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

time-shift
Stéphane Adjemian (Charybdis) 2014-05-14 21:01:09 +02:00
parent 84caf6d35f
commit cf86c8f721
4 changed files with 82 additions and 25 deletions

View File

@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
C = (A==B);
idx = find(C==0);
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
else
if isequal(A.ndat,1) && isequal(B.ndat,1)
C = compare_vectors(@ge, A.time, B.time);
elseif isequal(A.ndat,1)
if isequal(A.ndat,1)
C = NaN(B.ndat,1);
for i=1:B.ndat
C(i) = compare_vectors(@ge, A.time, B.time(i,:));
C(i) = greaterorequal(A.time, B.time(i,:));
end
elseif isequal(B.ndat,1)
C = NaN(A.ndat,1);
for i=1:A.ndat
C(i) = compare_vectors(@ge, A.time(i,:), B.time);
C(i) = greaterorequal(A.time(i,:), B.time);
end
else
C = 0;
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
%$ % Define some dates
%$ date_2 = '1950Q2';

View File

@ -42,26 +42,40 @@ end
if isequal(A.ndat, B.ndat)
C = NaN(A.ndat,1);
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
else
if isequal(A.ndat,1) && isequal(B.ndat,1)
C = compare_vectors(@gt, A.time, B.time);
elseif isequal(A.ndat,1)
if isequal(A.ndat,1)
C = NaN(B.ndat,1);
for i=1:B.ndat
C(i) = compare_vectors(@gt, A.time, B.time(i,:));
C(i) = greaterthan(A.time, B.time(i,:));
end
elseif isequal(B.ndat,1)
C = NaN(A.ndat,1);
for i=1:A.ndat
C(i) = compare_vectors(@gt, A.time(i,:), B.time);
C(i) = greaterthan(A.time(i,:), B.time);
end
else
C = 0;
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
%$ % Define some dates
%$ date_2 = '1950Q2';

View File

@ -43,26 +43,41 @@ if isequal(A.ndat, B.ndat)
C = (A==B);
idx = find(C==0);
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
else
if isequal(A.ndat,1) && isequal(B.ndat,1)
C = compare_vectors(@le, A.time, B.time);
elseif isequal(A.ndat,1)
if isequal(A.ndat,1)
C = NaN(B.ndat,1);
for i=1:B.ndat
C(i) = compare_vectors(@le, A.time, B.time(i,:));
C(i) = lessorequal(A.time, B.time(i,:));
end
elseif isequal(B.ndat,1)
C = NaN(A.ndat,1);
for i=1:A.ndat
C(i) = compare_vectors(@le, A.time(i,:), B.time);
C(i) = lessorequal(A.time(i,:), B.time);
end
else
C = 0;
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
%$ % Define some dates
%$ date_2 = '1950Q2';
@ -79,7 +94,7 @@ end
%$ i2 = (d3<=d4);
%$ i3 = (d4<=d2);
%$ i4 = (d5<=d4);
%$ i5 = (d5<=d5);
%$ i5 = (d5<=d5);
%$
%$ % Check the results.
%$ t(1) = dyn_assert(i1,1);

View File

@ -42,26 +42,39 @@ end
if isequal(A.ndat, B.ndat)
C = NaN(A.ndat,1);
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
else
if isequal(A.ndat,1) && isequal(B.ndat,1)
C = compare_vectors(@lt, A.time, B.time);
elseif isequal(A.ndat,1)
if isequal(A.ndat,1)
C = NaN(B.ndat,1);
for i=1:B.ndat
C(i) = compare_vectors(@lt, A.time, B.time(i,:));
C(i) = lessthan(A.time,B.time(i,:));
end
elseif isequal(B.ndat,1)
C = NaN(A.ndat,1);
for i=1:A.ndat
C(i) = compare_vectors(@lt, A.time(i,:), B.time);
C(i) = lessthan(A.time(i,:),B.time);
end
else
C = 0;
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
%$ % Define some dates
%$ date_2 = '1950Q2';