# HG changeset patch # User Rik # Date 1444622981 25200 # Node ID 4e307c55a2b5c26d87bdbe46c17a5e10ea676e48 # Parent d6d04088ac9edcb56abcc86434188f30ee501ef0 Use isempty () rather than any () for faster code in inverse statistical distributions. betainv.m, binoinv.m, gaminv.m, poissinv.m: Use '! isempty (k)' rather than 'any (k)' for faster code. diff -r d6d04088ac9e -r 4e307c55a2b5 scripts/statistics/distributions/betainv.m --- a/scripts/statistics/distributions/betainv.m Sun Oct 11 20:33:37 2015 -0700 +++ b/scripts/statistics/distributions/betainv.m Sun Oct 11 21:09:41 2015 -0700 @@ -56,7 +56,7 @@ inv(k) = 1; k = find ((x > 0) & (x < 1) & (a > 0) & (b > 0)); - if (any (k)) + if (! isempty (k)) if (! isscalar (a) || ! isscalar (b)) a = a(k); b = b(k); diff -r d6d04088ac9e -r 4e307c55a2b5 scripts/statistics/distributions/binoinv.m --- a/scripts/statistics/distributions/binoinv.m Sun Oct 11 20:33:37 2015 -0700 +++ b/scripts/statistics/distributions/binoinv.m Sun Oct 11 21:09:41 2015 -0700 @@ -55,7 +55,7 @@ k = find ((x >= 0) & (x <= 1) & (n >= 0) & (n == fix (n) & (p >= 0) & (p <= 1))); - if (any (k)) + if (! isempty (k)) x = x(k); if (isscalar (n) && isscalar (p)) [inv(k), unfinished] = scalar_binoinv (x(:), n, p); diff -r d6d04088ac9e -r 4e307c55a2b5 scripts/statistics/distributions/gaminv.m --- a/scripts/statistics/distributions/gaminv.m Sun Oct 11 20:33:37 2015 -0700 +++ b/scripts/statistics/distributions/gaminv.m Sun Oct 11 21:09:41 2015 -0700 @@ -58,7 +58,7 @@ inv(k) = Inf; k = find ((x > 0) & (x < 1) & (a > 0) & (a < Inf) & (b > 0) & (b < Inf)); - if (any (k)) + if (! isempty (k)) if (! isscalar (a) || ! isscalar (b)) a = a(k); b = b(k); diff -r d6d04088ac9e -r 4e307c55a2b5 scripts/statistics/distributions/poissinv.m --- a/scripts/statistics/distributions/poissinv.m Sun Oct 11 20:33:37 2015 -0700 +++ b/scripts/statistics/distributions/poissinv.m Sun Oct 11 21:09:41 2015 -0700 @@ -61,9 +61,8 @@ inv(k) = Inf; k = (x > 0) & (x < 1) & (lambda > 0); - - limit = 20; # After 'limit' iterations, use approx - if (! isempty (k)) + if (any (k(:))) + limit = 20; # After 'limit' iterations, use approx if (isscalar (lambda)) cdf = [(cumsum (poisspdf (0:limit-1,lambda))), 2]; y = x(:); # force to column @@ -75,11 +74,11 @@ cdf = exp (-lambda(kk)); for i = 1:limit m = find (cdf < x(kk)); - if (any (m)) + if (isempty (m)) + break; + else inv(kk(m)) += 1; cdf(m) += poisspdf (i, lambda(kk(m))); - else - break; endif endfor endif @@ -186,6 +185,7 @@ y = lambda(k) .* r + log (sqrt (2*r.*((1-r) + r.*t)) ./ abs (r-1)) ./ t; inv(k) = floor (y - 0.0218 ./ (y + 0.065 * lambda(k))); endif + endfunction