# HG changeset patch # User John W. Eaton # Date 1670047317 18000 # Node ID 1e270beb69824fbac7f66e449c5bd8afdc56c790 # Parent 9034cf6637687c5455ea2558d7077318dfe5e5a9# Parent 59422a6fbd915d2115b35f8a7e762008083f401d maint: Merge stable to default. diff -r 9034cf663768 -r 1e270beb6982 libinterp/corefcn/data.cc --- a/libinterp/corefcn/data.cc Sat Dec 03 01:00:04 2022 -0500 +++ b/libinterp/corefcn/data.cc Sat Dec 03 01:01:57 2022 -0500 @@ -4579,7 +4579,7 @@ @deftypefnx {} {@var{val} =} ones (@var{m}, @var{n}) @deftypefnx {} {@var{val} =} ones (@var{m}, @var{n}, @var{k}, @dots{}) @deftypefnx {} {@var{val} =} ones ([@var{m} @var{n} @dots{}]) -@deftypefnx {} {@var{val} =} ones (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} ones (@dots{}, "like", @var{var}) @deftypefnx {} {@var{val} =} ones (@dots{}, @var{class}) Return a matrix or N-dimensional array whose elements are all 1. @@ -4672,7 +4672,7 @@ @deftypefnx {} {@var{val} =} zeros (@var{m}, @var{n}) @deftypefnx {} {@var{val} =} zeros (@var{m}, @var{n}, @var{k}, @dots{}) @deftypefnx {} {@var{val} =} zeros ([@var{m} @var{n} @dots{}]) -@deftypefnx {} {@var{val} =} zeros (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} zeros (@dots{}, "like", @var{var}) @deftypefnx {} {@var{val} =} zeros (@dots{}, @var{class}) Return a matrix or N-dimensional array whose elements are all 0. @@ -4820,7 +4820,7 @@ @deftypefnx {} {@var{val} =} NaN (@var{n}) @deftypefnx {} {@var{val} =} NaN (@var{n}, @var{m}) @deftypefnx {} {@var{val} =} NaN (@var{n}, @var{m}, @var{k}, @dots{}) -@deftypefnx {} {@var{val} =} NaN (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} NaN (@dots{}, "like", @var{var}) @deftypefnx {} {@var{val} =} NaN (@dots{}, @var{class}) Return a scalar, matrix, or N-dimensional array whose elements are all equal to the IEEE symbol NaN (Not a Number). @@ -5226,7 +5226,7 @@ @deftypefnx {} {@var{val} =} NA (@var{n}) @deftypefnx {} {@var{val} =} NA (@var{n}, @var{m}) @deftypefnx {} {@var{val} =} NA (@var{n}, @var{m}, @var{k}, @dots{}) -@deftypefnx {} {@var{val} =} NA (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} NA (@dots{}, "like", @var{var}) @deftypefnx {} {@var{val} =} NA (@dots{}, @var{class}) Return a scalar, matrix, or N-dimensional array whose elements are all equal to the special constant used to designate missing values. @@ -5265,7 +5265,7 @@ @deftypefn {} {@var{val} =} false (@var{x}) @deftypefnx {} {@var{val} =} false (@var{n}, @var{m}) @deftypefnx {} {@var{val} =} false (@var{n}, @var{m}, @var{k}, @dots{}) -@deftypefnx {} {@var{val} =} false (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} false (@dots{}, "like", @var{var}) Return a matrix or N-dimensional array whose elements are all logical 0. If invoked with a single scalar integer argument, return a square @@ -5300,7 +5300,7 @@ @deftypefn {} {@var{val} =} true (@var{x}) @deftypefnx {} {@var{val} =} true (@var{n}, @var{m}) @deftypefnx {} {@var{val} =} true (@var{n}, @var{m}, @var{k}, @dots{}) -@deftypefnx {} {@var{val} =} true (@dots{}, "@var{like}", @var{var}) +@deftypefnx {} {@var{val} =} true (@dots{}, "like", @var{var}) Return a matrix or N-dimensional array whose elements are all logical 1. If invoked with a single scalar integer argument, return a square diff -r 9034cf663768 -r 1e270beb6982 scripts/statistics/mean.m --- a/scripts/statistics/mean.m Sat Dec 03 01:00:04 2022 -0500 +++ b/scripts/statistics/mean.m Sat Dec 03 01:01:57 2022 -0500 @@ -177,10 +177,8 @@ ndims = numel (sz); misdim = [1:ndims]; - ## keep remaining dimensions - for i = 1:numel (dim) - misdim(misdim == dim(i)) = []; - endfor + dim(dim > ndims) = []; # weed out dimensions larger than array + misdim(dim) = []; # remove dims asked for leaving missing dims switch (numel (misdim)) ## if all dimensions are given, compute x(:) @@ -196,26 +194,30 @@ ## for 1 dimension left, return column vector case 1 x = permute (x, [misdim, dim]); + y = zeros (size (x, 1), 1, "like", x); for i = 1:size (x, 1) - x_vec = x(i,:,:,:,:,:,:)(:); + x_vec = x(i,:)(:); if (omitnan) x_vec = x_vec(! isnan (x_vec)); endif y(i) = sum (x_vec, 1) ./ numel (x_vec); endfor + y = ipermute (y, [misdim, dim]); ## for 2 dimensions left, return matrix case 2 x = permute (x, [misdim, dim]); + y = zeros (size (x, 1), size (x, 2), "like", x); for i = 1:size (x, 1) for j = 1:size (x, 2) - x_vec = x(i,j,:,:,:,:,:)(:); + x_vec = x(i,j,:)(:); if (omitnan) x_vec = x_vec(! isnan (x_vec)); endif y(i,j) = sum (x_vec, 1) ./ numel (x_vec); endfor endfor + y = ipermute (y, [misdim, dim]); ## for more than 2 dimensions left, throw error otherwise @@ -319,16 +321,16 @@ ## Test dimension indexing with vecdim in N-dimensional arrays %!test %! x = repmat ([1:20;6:25], [5 2 6 3]); -%! assert (size (mean (x, [3 2])), [10 3]); -%! assert (size (mean (x, [1 2])), [6 3]); -%! assert (size (mean (x, [1 2 4])), [1 6]); +%! assert (size (mean (x, [3 2])), [10 1 1 3]); +%! assert (size (mean (x, [1 2])), [1 1 6 3]); +%! assert (size (mean (x, [1 2 4])), [1 1 6]); %! assert (size (mean (x, [1 4 3])), [1 40]); %! assert (size (mean (x, [1 2 3 4])), [1 1]); ## Test results with vecdim in N-dimensional arrays and "omitnan" %!test %! x = repmat ([1:20;6:25], [5 2 6 3]); -%! m = repmat ([10.5;15.5], [5,3]); +%! m = repmat ([10.5;15.5], [5 1 1 3]); %! assert (mean (x, [3 2]), m, 4e-14); %! x(2,5,6,3) = NaN; %! m(2,3) = NaN; @@ -337,12 +339,12 @@ %! assert (mean (x, [3 2], "omitnan"), m, 4e-14); ## Test input validation -%!error mean () -%!error mean (1, 2, 3) -%!error mean (1, 2, 3, 4, 5) -%!error mean (1, "all", 3) -%!error mean (1, "b") -%!error mean (1, 1, "foo") +%!error mean () +%!error mean (1, 2, 3) +%!error mean (1, 2, 3, 4, 5) +%!error mean (1, "all", 3) +%!error mean (1, "b") +%!error mean (1, 1, "foo") %!error mean ({1:5}) %!error mean ("char") %!error mean (1, ones (2,2))